03mysql突击-学习14-六星教育14索引基础_第1页
03mysql突击-学习14-六星教育14索引基础_第2页
03mysql突击-学习14-六星教育14索引基础_第3页
03mysql突击-学习14-六星教育14索引基础_第4页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

0..0..2SQLObteehshPage/ ©CopyrighMonday,Jun0,209,:33PMbyB+tree的结在nnoDB引擎中,每一个索引都对应一棵B+ree,nnoDB的索引主要分为主索引和辅助索引keykey就是主索引,也就是主键,也被称为聚簇索引。因为无法同时把数据行存放在两个不同的地方,所以一个表只能有一个索引。在nnoDB中,主索引的叶子节点存的是整行数据,这也意味着nnoDB中的表一定要有一个主索引;辅助索引:某个key指定的顺序与文件记录的物理顺序不同,这个key就是辅助索引。nnoDB中的辅助索引在叶子节点中并不实际的数据,只会包含nnoDB的表中要求必须有一个主键,那么可能有人会将号这种唯一性的标识作为主索引,这样就大错特错了。刚刚说到主键也被称为聚簇索引,它是要 号作为主键,不能保证每次插入的数据都是按照号的顺序进行排列的,这就使得每次主键的插入都变得完全随机,可能导致每次插入一条数据都会引起页的问题(这个话题在后面会讲到)。所以在表结构定义的时候,应该使用一个具有性的key作为主键,如果真的没有的话,可以使用一个AUONCREMEN键作为主索引,这样可以保证数据行是顺序写入的。如果你真的完全没有定义主键,会选择一个唯一的非空索引代替,但是如果没有这样的索引,InnoDB会隐式定义一个主键来作为索引1a12a1314a05j1联合索引在查询的时候,比如要找Ace,2这条记录wereame="alice"adage=MySQL会先根据name查找到了两条数据,然后再根据age找到d2的这条数据结合B+ree的特点,自增主键是连续的,在插入过程中尽量减少页,即使要进行页,也只会很少一部分。并且能减少数据的移动,每次插入都是插3.2回但是因为gende对应的b+te的记录中只含有gende这个字段,而在查询中需要monhsaaygende所记录的数据。这时需要把从上一步中获取到的每一条记录的d字段都到聚簇索引对应的B+索引gender会先根据gender的值进行排序,所以值为0的记录在磁盘中的是相连的,集中分布在一个或几个数据页中,我们可以很快的把这些连着的记录 方式我们也可以称为顺序/O完整的用户记录可能分布在不同的数据页中,这样完整的用户记录可能要的数据页,这种方式我们也可以称为随机/O。一般情况下,顺序/O比随机/O的性能高很多,所以步骤1的执行可能很快,而步骤2就慢一些。所以这个使用索引gender的查询有这么两个特点:会使用到两个B+树索引,一个二级索引,一个聚簇索引。二级索引使用顺序/O,聚簇索引使用随机/Ohash索 (usngndex)。不过内存中的行的速度很快,索引Tablee CTablee Clmellnaiiy l Y A A1 全文索引(full全文索引,在MySQL5.6之前仅有mysam引擎支持,而在5.6及以上的版本中开始nnodb支持全文索引。所谓全文索引,是一种通过建立倒排索引,快速eenngramngram就是一段文字里面连续的n个字的序列。ngram全文解析器能够对文本进行分词,每个单词是连续的n个字的序列。例如,用ngram:s0Y As1 e Clmellnaiiy l e 下除了customers.frm和customers.bd文件外还有如上的文FS0000000000000031000000000000005cNDEX1~6.bd这6个文件用于倒排索引,的是分词和位置以及 进行分区,映射到不同的文件中;文件名规则为FS{ABLED{NDEXDINDEX{N.bdFS0000000000000031BENGDELEED.bd包含已经被删除的DOCDFS0000000000000031DELEEDCACHE.bd是前者的内存缓存(但是搜索了下代码,只有当ftscachet::deleteddocids被使用时,才会在sync时转储到该表中,但并没有发现任何地方使用这个对象)FS0000000000000031BENGDELEEDCACHE.bdFS0000000000000031BENGDELEED.bd,包含了已经被删除索引记录并且正在从全文索引中移除的DOCD,前者是后者的内存版本,这两个表主要用于辅助进行OPMZEABLE时将DELEED/DELEEDCACHED表中的记录转储到其中。FS0000000000000031CONFG.bd,包含全文索引的内部信息,最重要的是FSSYNCEDDOCD,表示已经解析并刷到磁盘的docd,在恢复普通DML Bed0199806v内0198411f0193007ed0199806v内0198411f0193007v内 198411f 193007r 192304WORDWORDDODATDD D N1101 e索引弊端:当创建了一个索引之后,比如tabe创建了一个dxcty的索引,这个时候,当数据表tabe内容一旦发生了改变之后,MySQL就会重新调整索引的结挑选索引-索引应该刨建在搜索、排序、归组等操作所涉及的数据列上,只在输出报告里出现的数据列不是好的候选。换句话说,WHERE子句、关联检索中的FROM子句、ORDERBY或GROUPBY子句中出现过的数据列最适合用来创建索引。只在SELEC关键字后面的输出列里出现过的数据列并不是好的候推推 同的数据行很好地区分开;如果某个数据列里存放的是用来表示的M和F两种值,建立在其上的索引恐怕就帮不上多大的忙了如果数据值的分布比较均匀,那么,不管使用哪个值(M或F)进行搜索都会匹配到大约50%的数据行。在这种情况下MySQL selectcou(*),v(tsalary)rocuomrweregeder=0;就可以创建一个dxgendermonthsaay的索引还是有很多情况是不会使用到的比如之前题目的第二题查询同城市的客户数量和平均月薪setprofiling=>)m111rowsinset(42.70sec)>rDn )m11rowinset,1rig(0.00sec)> s g m g tgtmp Sendingdata Cratigsort query g query cleaning 20rowsinset,1wig(0.00会发现查询时间特别长通过explain>)m1 select_type partitionstypepossible_keys key_len E 1 NULLNULL 100.00igtmr;iggym>showindexrmt; e Clumellnaiiy e1 Y1A 1 y1A 1 y2yA 但是我们可以通过一个技巧给这个操作使用上ix_gender_motsaary这个索引改写一下>)m111rowsinset(24.14sec)>)m1 select_type partitionstype key_len E cs1NULL ddrmsaryNULLNULL 100.00gw;igtemprry;igfilesortg这个案例显示了一个基本原则考虑表上所有的选项。当设计索引时不要只为现有的査询考虑需要哪些索引需要创建新索引但是这个索引又会降低另一些查询的效率那么应该想一下是否能优化原来的查询。应该同时优化查询和索引以找到最佳的平衡altertabler1dropindex;1;ys>explainselectatslr)omct1groupbycity; select_typetable partitionstype key_lenref E cs1 indexy y 100.00igindex;igtmprry;sgg>)m111rowsinset(1.01sec)s>selectutatala)mr1wheregender ) s>explainselecttatala)mmr1wheregender select_typetable partitionstypepossible_keys key_lenref E 1 y y 100.00igg>)mcount(*)gotsa) Page/ ©CopyrighMonday,Jun0,209,:33PMbynn 存在内存里的索引多,索引缓存区中率也就越高。(当然,你也得有点。如果只对数据列的第一个字符进行索引,它的用处就可能没有这么大,因为能B在读记录的变长字段长度列表时先查看表结构,如果某个变长字段允许的最大字节数大于时,该怎

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论