什么叫索引?索引的作用和分类
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
作用:
索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。
分类:
1、唯一索引
唯一索引是不允许其中任何两行具有相同索引值的索引。当现有数据中存在重复的键值时,大多数数据库不允许将新创建的唯一索引与表一起保存。
2、主键索引
数据库表经常有一列或多列组合,其值唯一标识表中的每一行。该列称为表的主键。在数据库关系图中为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。
3、聚集索引
在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。如果某索引不是聚集索引,则表中行的物理顺序与键值的逻辑顺序不匹配。与非聚集索引相比,聚集索引通常提供更快的数据访问速度。
4、索引列
可以基于数据库表中的单列或多列创建索引。多列索引可以区分其中一列可能有相同值的行。如果经常同时搜索两列或多列或按两列或多列排序时,索引也很有帮助。例如,如果经常在同一查询中为姓和名两列设置判据,那么在这两列上创建多列索引将很有意义。
扩展资料:
优点:
1、大大加快数据的检索速度。
2、创建唯一性索引,保证数据库表中每一行数据的唯一性。
3、加速表和表之间的连接。
4、在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。
缺点:
1、索引需要占物理空间。
2、当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。
--索引
--数据库索引
第一章 总 则
第一条 为建立健全图书质量管理机制,使图书出版工作更好地为人民服务,为社会主义服务,为全党全国的工作大局服务,努力实现图书出版从扩 大规模数量为主向提高质量效益为主的转变,促进图书出版事业的繁荣和发展,依据中国《出版管理条例》和有关图书质量的政策、法规、标准,特制 定本规定。
第二条 本规定适用于经国家正式批准的图书出版单位及其出版的图书。
第二章 图书质量的分级和标准
第三条 图书质量管理的范围,包括选题、内容、编辑加工、校对、装帧设计、印刷装订……方面。为了便于管理,本规定将有连带关系的选题和内 容,合并为内容项;将编辑加工和校对,合并为编校项。
第四条 图书内容质量、装帧设计质量分为两级,即:合格、不合格;编校质量、印刷装订质量分为四级,即:优质、良好、合格、不合格。
第五条 图书内容的质量分级标准
1、在思想、文化、科学、艺术……方面,有一定的学术价值、文化积累价值或使用价值的,为合格。
2、在思想、文化、科学、艺术……方面,没有价值,有严重问题,或违反国家有关政策禁止出版的,为不合格。
第六条 图书编校的质量分级标准
1、差错率低于025/10000的,为优质。
2、差错率超过025/0000,未超过05/10000的,为良好。
3、差错率超过05/10000,未超过1/10000的,为合格。
4、差错率超过1/10000的,为不合格。
图书编校质量差错率的计算方法,见本规定附件。
第七条 图书装帧设计的质量分级标准
l、封面(包括封一、封二、封三、封底、勒口、护封、封套、书脊)、扉页、插图……,能够恰当反映图书的内容,格调健康;全书版式设计统一, 字体、字号合理的,为合格。
2、封面(包括封一、封二、封三、封底、勒口、护封、封套、书脊)、扉页、插图……,不能反映图书的内容,或格调不健康,或全书版式设计不统 一,字体、字号使用混乱的,为不合格。
第八条 图书印刷装订的质量分级标准
根据新闻出版署发布的中华人民共和国出版行业标准《书刊印刷标准CY/1-3-91,CY/T4-6-91,CY/T7.1-7.9-9],CY/T12-17-95》的规 定:
1、图书印刷装订的质量全面达到优质品标准的,为优质。
2、图书印刷装订的质量某一项或某两项存在细小疵点,其他各项均达到优质品标准的,为良好。
3、图书印刷装订的质量全面达到合格品标准的,为合格。
4、图书印刷装订的质量有严重缺陷,达不到合格品标准的,为不合格。
第九条 成品图书的质量标准分为四级,即:优质品、良好品、合格品、不合格品。
第十条 成品图书的质量标准
1、图书内容、装帧设计的质量达到合格标准,且编校、印刷装订的质量达到优质标准的,为优质品。
2、图书内容、装帧设计的质量达到合格标准,编校、印刷装订的质量达到良好标准(含其中一个项目达到优质标准)的,为良好品。
3、图书内容、装帧设计的质量达到合格标准,编校、印刷装订的质量均达到合格标准(含其中一个项目达到良好或优质标准)的,为合格品。
4、图书内容、编校、装帧设计、印刷装订四项中有一项不合格的,为不合格品。
第三章 图书质量的管理
第十一条 出版社须设立由社领导主持的图书质量管理机构,指导和督促各部门、各环节、各岗位的职工实施质量保证措施,对成品图书作出质量等 级评定,对不合格图书作出处理。
第十二条 出版社须制定图书质量管理制度,建立质量管理和质量保证体系,使保证图书质量的工作落实到出书的全过程和全体职工,在制定图书质 量管理制度时须体现保证图书质量的基本制度--选题的专项、专题报批制度;三级审稿制度;
发稿达到“齐、清、定”要求;三校一读校对责任制度;生产督印制度;样书检查和成品检查制度。
第十三条 出版社于每年1月31日前上报上一年度的图书质量检查结果和有关情况。上报的程序是:在京的中央和国家机关各部门所属出版社经主管 部门审批同意后,报新闻出版署;各省、自治区、直辖市所属出版社由各省级新闻出版管理部门审批同意后,报新闻出版署;设在地方的中央各部门的 出版社(军队出版社除外)经主管部门审批同意,并征得所在地省级新闻出版管理部门审批同意后,统一由省级新闻出版管理部门报新闻出版署;军队系 统出版社由解放军总政宣传部审批后,报新闻出版署。
第十四条 地方省级新闻出版局和出版社的主管单位须设立专门机构或有专人负责指导所属或所辖出版社的图书质量管理工作:审核选题计划;审核 批准重要稿件的出版;组织图书质量检查小组(或聘请图书质量审读员)对图书进行抽查;对不合格图书提出处理意见;对所属或所辖出版社出版的图书 在内容……方面发生的严重错误和其他重大问题,承担领导责任。
第十五条 新闻出版署根据全国图书质量的实际情况及读者的反映,每年选取部分出版社的图书,组织审读员进行质量抽查。
第十六条 地方省级新闻出版局或新闻出版署对图书质量进行检查后,须将检查结果和审读记录以书面形式通知出版社。出版社如有不同意见,可在 接到通知后的30日内提出申辩意见上报,请求复议。如有异议,报新闻出版署裁定。
第十七条 地方省级新闻出版局或新闻出版署对所检查图书质量的最终结果及处理决定,发出通报。
第四章 奖励与处罚
第十八条 对一贯注重图书质量工作的出版单位和个人,以及采取有力措施,在短期内提高了图书质量的出版单位和个人,新闻出版署、地方新闻出 版局可以结合图书质量检查工作给予表扬和奖励。
第十九条 对于年新版图书品种有10%以上图书质量不合格的出版社,新闻出版署、地方省级新闻出版局可以视情节轻重,给予通报批评或处罚。根 据《中华人民共和国行政处罚法》,处罚包括:警告、罚款、停业整顿。对中央级出版社的处罚决定,由新闻出版署作出;对地方出版社的处罚决定, 由地方省级新闻出版局或新闻出版署作出,罚款上缴当地财政。
第二十条 经检查为质量不合格的图书,须采取技术处理或改正重印,方可继续在市场上销售。如发现已定为不合格的图书在该图书定为不合格品的 通报或处罚决定发布三个月后仍在市场上销售,由地方省级新闻出版局或新闻出版署对出版社进行经济处罚,除没收该书所得外,还要根据情节轻重处 以罚款,上缴当地财政。
第二十一条 连续两年造成图书不合格的责任者,其年终考核应定为不称职;不称职的人员,不能按正常晋升年限晋升其专业技术职务和工资;连续 三年检查为不合格品图书的责任者,不能继续从事该岗位的工作。
第五章 附 则
第二十二条 本规定由新闻出版署负责解释。
第二十三条 本规定自发文之日起生效。1992年发布的《图书质量管理规定(试行)》停止执行。
附:图书编校质量差错率的计算方法
一、图书差错率,是指以审读一本图书的总字数,去除审读
该书之后发现的总差错数,计算出来的“万分比”。如审读一本图书的总字数为10万,审读后发现两个差错,则该书的差错率为2/100000,即为 0.2/10000。
二、图书总字数的计算方法,一律以该书的版面字数为准,即:总字数:每面行数X每行字数X总面数。
1、除环衬……空白面不计字数外,凡连续编排页码的正文、目录、辅文……,不论是否排字,均按一面满版计算字数,分栏排版的图书,各栏之间 的空白也计算版面字数。
2、书眉(或中缝)、单排的页码、边码也按正文行数,一并计算字数。
3、目录、索引、附录……字号有变化时,分别按版面计算字数。
4、用小号字排版的脚注文字超过5行不足10行,按该面正文字数加15%计算;超过半面,则该面按注文的满面计算字数。用小号字排版的夹注文 字,随正文版面计算字数。
5、封面(包括封一、封二、封三、封底、勒口、护封、封套、书脊)、扉页,除空白面不计以外,每面按正文版面字数的50%计算;版权页、勒口 (有文字的)按正文的一个版面计算字数。
6、凡旁边串排正文的插图、表格,按正文的版面字数计算;插图占一面的,按正文版面字数的50%计算;表格占一面的,按正文版面计算字数。
7、凡有文字说明的画册、摄影集、乐谱,一律按正文的版面字数全额计算;无文字说明的,按正文版面的30%计算字数。
8、外文版图书、少数民族文字版图书的版面字数,以同样的中文版面字数加30%计算。
三、图书差错的计算方法
1、文字差错的计算标准
⑴凡正文、目录、出版说明、前言(或序)、后记(或跋)、注释、索引、图表、附录、参考文献中的一般性错字、多字、漏字、倒字,每处计1个差 错。前后颠倒字,以用一个校对符号可以改正的,每处计1个差错;书眉(或中缝)中的差错,无论有几个,1条计1个差错;行文中的数字错,每码计1个 差错;页码(包括边码)错,每处计1个差错。
一面内文字连续错、多、漏,5个字以下计2个差错,5个字(不含)以上计5个差错。
⑶封面(包括书脊)、封底、勒口、扉页、版权页上的文字错,每处计2个差错。
⑷知识性、逻辑性、语法性差错,每处计2个差错。
⑸一般性的科学技术性、政治性差错,每处计3个差错。
⑹外文、少数民族拼音文字、国际音标、汉语拼音以一个单词或词组为单位,无论一个单词或词组中几个字母有错,均计1个差错。
⑺外文缩写词应大写(如DNA)却小写(如dna)的,不同文种的单词、缩写语混用(如把英文缩写N错为俄文缩写H)的,每处计1个差错。
⑻外文中的人名、地名、国家和单位名称……专用名词,词首应该大写却错为小写的,每处计05个差错;同一差错在全书超过3处(含3处),计 15个差错。
⑼自造简化字、同音代替字,按错字计算;混用简化字、繁体字,每处计05个差错,全书最多计3个差错。
⑽量和单位的中文名称不符合国家标准的,每处计05个差错;同一差错多次出现,每面只计0.5个差错。
⑾阿拉伯数字与汉语数字用法不规范,每处计025个差错,全书最多计3个差错。
2、标点符号和其他符号差错的计算标准
⑴标点符号的一般错用、漏用、多用,每处计0.5个差错。但成组的标点符号,如引号、括号、书名号……错用、漏用、多用一边的,按每组计 05个差错。
⑵小数点误为中圆点,或中圆点误为小数点的,每处计025个差错;名线、着重点的错位、多、漏,每处计025个差错。
⑶破折号误为一字线、半字线,每处计025个差错;标点符号误在行首、行末的,每处计025个差错;可用逗号也可用顿号,可用分号也可用句 号的,不计错。
⑷外文复合词、外文单词按音节转行,漏排连接号的,每处计01个差错;同样差错在每面超过3个(含3处),只计03个差错。
⑸法定计量单位和符号,数理化……科技计量和符号、乐谱……符号的一般性差错,视情节轻重,计05-1个差错;同样差错,重复出现,每面只 计05-1个差错。
⑹图序、表序、公式序……序列性差错,每处计05个差错,全书超过3处(含3处),计15个差错。
3、格式差错的计算标准
⑴影响文意,不合版式要求的另页、另面、另段、另行、接排、空行,每处计0.25个差错。
⑵连续在一起的字体、字号错,每处计025个差错;字体和字号同时错,每处也计0.25个差错。
⑶在同一面上几个同级标题的位置、转行格式不统一的,计025个差错;肩题与正文之间未空格的,每处计025个差错。
⑷阿拉伯数字转行的,每处计01个差错。
⑸图、表的位置错,图、表的内容与说明文字不符,每处计2个差错。
⑹书眉单双页位置互错,每处计05个差错。
⑺脚注注码与正文注码配套,但不顺号;或有注码无注文,有注文无注码的,每处计025个差错。
四、图书的封面(包括封一、封二、封三、封底、勒口、护封、封套、书脊)、扉页、版权页、前言(或序)、后记(或跋)、目录,都为必须审读、检 查的内容。
文件目录结构又称文件索引结构,分一级文件索引、二级文件索引和三级文件索引三种。
一级文件索引(直接索引)的结构中:文件目录条目中有一组条目用于建立索引,并且每个条目都会注册逻辑记录所在的磁盘块号。逻辑记录的大小和磁盘块号等于512B。激活创建表后,系统会自动创建第一级索引。其具有稳定性和大数据量的优点。缺点是无法修改,检索效率低。
二级文件索引(第一级间接索引)的结构中:文件目录中有一组条目,文件寄存器的内容为第一级索引表块的块号。一级索引表块中的索引表注册文件逻辑记录所在的磁盘块号。二级索引的优点是可以由用户修改,但缺点是安全性和稳定性低。
三级文件索引(第二级间接索引)的结构中:文件目录条目中有一组表条目,并且文件注册的内容是第二级索引表块的块号。第二级索引表块中的索引表项记录了第一级索引表块的块号,而第一级索引表项记录了文件逻辑记录所在的磁盘块号。其优点是结构搜索效率高,但缺点是数据内容少。
扩展资料:
文件目录结构的三个属于渐进关系,并且在可以构造上一级目录结构之前,必须完全构造下一级文件索引。 文件索引结构意味着文件的信息存储在许多离散的物理块中。 系统为每个文件(索引表)创建一个专用的数据结构,并将这些块的块号存储在索引表中。
其次,这三种文件目录结构的优点是保留了链接结构,同时解决了其缺点,即可以顺序和随机地访问,满足了动态文件增长,插入和删除的需求,并且还可以完全利用外部存储空间。 缺点是系统本身带来的系统开销。
如何创建mysql索引以及索引的优缺点
第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
创建唯一性索引,保证数据库表中每一行数据的唯一性。加快数据的检索速度,这也是创建索引的最主要的原因。减少磁盘IO(向字典一样可以直接定位)。
通过创建唯一索引可以保证数据库表中每一行数据的唯一性。可以给所有的MySQL列类型设置索引。可以大大加快数据的查询速度,这是使用索引最主要的原因。在实现数据的参考完整性方面可以加速表与表之间的连接。
建立索引的好处主要有以下几点:提高查询速度:通过建立索引,可以加速数据的查询和访问速度,提高搜索引擎的响应速度,减少用户等待时间。
MySQL索引类型包括:(1)普通索引这是最基本的索引,它没有任何限制。
建立索引的优缺点:为什么要创建索引呢?这是因为,创建索引可以大大提高系统的性能。第通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。第可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
mysql创建索引需要注意什么1、尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可。一个顶三个。
2、创建索引的目的在于提高查询效率,但也要注意:首先,索引能大大提高了查询速度,但同时却会降低更新表的速度,如对表进行INSERT,UPDATE和DELETE。因为更新表时,mysql不仅要保存数据,还要保存一下索引文件。
3、MySQL主要提供2种方式的索引:B-Tree索引,Hash索引。B树索引具有范围查找和前缀查找的能力,对于有N节点的B树,检索一条记录的复杂度为O(LogN)。相当于二分查找。
4、不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行。表越大,花费的时间越多。如果表中查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要看所有数据。
5、尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可注意:选择索引的最终目的是为了使查询的速度变快。
数据库创建索引有什么优点和缺点使用索引可快速访问数据库表中的特定信息。建立索引的目的是加快对表中记录的查找或排序。为表设置索引要付出代价的:一是增加了数据库的存储空间,二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动)。
优点:大大加快数据的检索速度;创建唯一性索引,保证数据库表中每一行数据的唯一性;加速表和表之间的连接;在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。
二:优点:①可以加快数据的检索速度。②可以加速表和表之间的连接。③使用分组和排序子句进行数据检索时,可以减少查询中分组和排序的时间。三:缺点:①创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
where条件中多的列,需要排序的列。多建立复合索引总结下来索引有三大好处:索引大大减少了服务器要扫描的数据量。索引可以降随机IO变为顺序IO。索引可以帮助服务器避免排序和临时表。
通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。可以大大加快数据的检索速度,这也是创建索引的最主要的原因。可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
建立索引的优点:大大加快数据的检索速度;创建唯一性索引,保证数据库表中每一行数据的唯一性;加速表和表之间的连接;在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间。
ERP的结构组成是什么?从功能上看,ERP系统由制造管理、财务管理、分销管理、人力资源管理、质量管理和内控内审循环等子系统组成。各个子系统又有若干个功能模块组成。
ERP是将企业所有资源进行整合集成管理,简单的说是将企业的三大流:物流,资金流,信息流进行全面一体化管理的管理信息系统。
人力资源管理成为独立的模块,被加入ERP系统中,和财务、生产系统组成了高效、高度集成的企业资源系统。erp系统人力资源管理模块包含:人力资源规划的辅助决策体系、招聘管理、工资核算、工时管理、差旅核算等。
ERP是针对物资资源管理(物流)、人力资源管理(人流)、财务资源管理(财流)、信息资源管理(信息流)集成一体化的企业管理软件。一个由GartnerGroup开发的概念,描述下一代制造商业系统和制造资源计划(MRPII)软件。
ERP组成部分:物资资源管理、人力资源管理、财务资源管理、信息资源管理。
以下的文章主要介绍的是MySQL索引的缺点以及MySQL索引在实际操作中有哪些事项是值得我们大家注意的,我们大家可能不知道过多的对索引进行使用将会造成滥用,需要的朋友可以了解下
以下的文章主要介绍的是MySQL索引的缺点以及MySQL索引在实际操作中有哪些事项是值得我们大家注意的,我们大家可能不知道过多的对索引进行使用将会造成滥用。因此MySQL索引也会有它的缺点:
虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。
建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快。
索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的MySQL索引,或优化查询语句。
使用索引的注意事项
使用索引时,有以下一些技巧和注意事项:
1、索引不会包含有NULL值的列
只要列中包含有NULL值都将不会被包含在MySQL索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。
2、使用短索引
对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。
3、索引列排序
MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order
by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。
4、like语句操作
一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用MySQL索引而like “aaa%”可以使用索引。
5、不要在列上进行运算
select from users where YEAR(adddate)
从 MySQL 57 开始,开发人员改变了 InnoDB 构建二级索引的方式,采用自下而上的方法,而不是早期版本中自上而下的方法了。在这篇文章中,我们将通过一个示例来说明如何构建 InnoDB 索引。最后,我将解释如何通过为 innodb_fill_factor 设置更合适的值。
索引构建过程
在有数据的表上构建索引,InnoDB 中有以下几个阶段:1读取阶段(从聚簇索引读取并构建二级索引条目)2合并排序阶段3插入阶段(将排序记录插入二级索引)在 56 版本之前,MySQL 通过一次插入一条记录来构建二级索引。这是一种“自上而下”的方法。搜索插入位置从树的根部(顶部)开始并达到叶页(底部)。该记录插入光标指向的叶页上。在查找插入位置和进行业面拆分和合并方面开销很大。从MySQL 57开始,添加索引期间的插入阶段使用“排序索引构建”,也称为“批量索引加载”。在这种方法中,索引是“自下而上”构建的。即叶页(底部)首先构建,然后非叶级别直到根(顶部)。
示例
在这些情况下使用排序的索引构建:
ALTER TABLE t1 ADD INDEX(or CREATE INDEX)
ALTER TABLE t1 ADD FULLTEXT INDEX
ALTER TABLE t1 ADD COLUMN, ALGORITHM = INPLACE
OPIMIZE t1
对于最后两个用例,ALTER 会创建一个中间表。中间表索引(主要和次要)使用“排序索引构建”构建。
算法
在 0 级别创建页,还要为此页创建一个游标
使用 0 级别处的游标插入页面,直到填满
页面填满后,创建一个兄弟页(不要插入到兄弟页)
为当前的整页创建节点指针(子页中的最小键,子页码),并将节点指针插入上一级(父页)
在较高级别,检查游标是否已定位。如果没有,请为该级别创建父页和游标
在父页插入节点指针
如果父页已填满,请重复步骤 3, 4, 5, 6
现在插入兄弟页并使游标指向兄弟页
在所有插入的末尾,每个级别的游标指向最右边的页。提交所有游标(意味着提交修改页面的迷你事务,释放所有锁存器)
为简单起见,上述算法跳过了有关压缩页和 BLOB(外部存储的 BLOB)处理的细节。
通过自下而上的方式构建索引
为简单起见,假设子页和非子页中允许的 最大记录数为 3
CREATE TABLE t1 (a INT PRIMARY KEY, b INT, c BLOB);
INSERT INTO t1 VALUES (1, 11, 'hello111');
INSERT INTO t1 VALUES (2, 22, 'hello222');
INSERT INTO t1 VALUES (3, 33, 'hello333');
INSERT INTO t1 VALUES (4, 44, 'hello444');
INSERT INTO t1 VALUES (5, 55, 'hello555');
INSERT INTO t1 VALUES (6, 66, 'hello666');
INSERT INTO t1 VALUES (7, 77, 'hello777');
INSERT INTO t1 VALUES (8, 88, 'hello888');
INSERT INTO t1 VALUES (9, 99, 'hello999');
INSERT INTO t1 VALUES (10, 1010, 'hello101010');
ALTER TABLE t1 ADD INDEX k1(b);
InnoDB 将主键字段追加到二级索引。二级索引 k1 的记录格式为(b, a)。在排序阶段完成后,记录为:
(11,1), (22,2), (33,3), (44,4), (55,5), (66,6), (77,7), (88,8), (99,9), (1010, 10)
初始插入阶段
让我们从记录 (11,1) 开始。
在 0 级别(叶级别)创建页
创建一个到页的游标
所有插入都将转到此页面,直到它填满了
箭头显示游标当前指向的位置。它目前位于第 5 页,下一个插入将转到此页面。
还有两个空闲插槽,因此插入记录 (22,2) 和 (33,3) 非常简单
对于下一条记录 (44,4),页码 5 已满(前面提到的假设最大记录数为 3)。这就是步骤。
页填充时的索引构建
创建一个兄弟页,页码 6
不要插入兄弟页
在游标处提交页面,即迷你事务提交,释放锁存器等
作为提交的一部分,创建节点指针并将其插入到 当前级别 + 1 的父页面中(即在 1 级别)
节点指针的格式 (子页面中的最小键,子页码) 。第 5 页的最小键是 (11,1) 。在父级别插入记录 ((11,1),5)。
1 级别的父页尚不存在,MySQL 创建页码 7 和指向页码 7 的游标。
将 ((11,1),5) 插入第 7 页
现在,返回到 0 级并创建从第 5 页到第 6 页的链接,反之亦然
0 级别的游标现在指向兄弟页,页码为 6
将 (44,4) 插入第 6 页
下一个插入 - (55,5) 和 (66,6) - 很简单,它们转到第 6 页。
插入记录 (77,7) 类似于 (44,4),除了父页面 (页面编号 7) 已经存在并且它有两个以上记录的空间。首先将节点指针 ((44,4),8) 插入第 7 页,然后将 (77,7) 记录到同级 8 页中。
插入记录 (88,8) 和 (99,9) 很简单,因为第 8 页有两个空闲插槽。
下一个插入 (1010,10) 。将节点指针 ((77,7),8) 插入 1级别的父页(页码 7)。
MySQL 在 0 级创建同级页码 9。将记录 (1010,10) 插入第 9 页并将光标更改为此页面。
以此类推。在上面的示例中,数据库在 0 级别提交到第 9 页,在 1 级别提交到第 7 页。
我们现在有了一个完整的 B+-tree 索引,它是自下至上构建的!
索引填充因子
全局变量 innodb_fill_factor 用于设置插入 B-tree 页中的空间量。默认值为 100,表示使用整个业面(不包括页眉)。聚簇索引具有 innodb_fill_factor=100 的免除项。 在这种情况下,聚簇索引也空间的 1 /16 保持空闲。即 625% 的空间用于未来的 DML。
值 80 意味着 MySQL 使用了 80% 的页空间填充,预留 20% 于未来的更新。如果 innodb_fill_factor=100 则没有剩余空间供未来插入二级索引。如果在添加索引后,期望表上有更多的 DML,则可能导致业面拆分并再次合并。在这种情况下,建议使用 80-90 之间的值。此变量还会影响使用 OPTIMIZE TABLE 和 ALTER TABLE DROP COLUMN, ALGOITHM=INPLACE 重新创建的索引。也不应该设置太低的值,例如低于 50。因为索引会占用浪费更多的磁盘空间,值较低时,索引中的页数较多,索引统计信息的采样可能不是最佳的。优化器可以选择具有次优统计信息的错误查询计划。
排序索引构建的优点
没有页面拆分(不包括压缩表)和合并
没有重复搜索插入位置
插入不会被重做记录(页分配除外),因此重做日志子系统的压力较小
缺点
ALTER 正在进行时,插入性能降低 Bug#82940,但在后续版本中计划修复。
本文2023-08-04 16:46:47发表“古籍资讯”栏目。
本文链接:https://www.yizhai.net/article/12387.html