mysql索引知识备注

mysql索引分类

Innodb和MyISAM默认的索引是Btree索引;而Mermory默认的索引是Hash索引。

MyISAM叶子节点存储的是表的地址,所以说数据文件和索引文件是分开的,也称为非聚集

Innodb不同,主索引它的叶子节点存储的并不是表的地址,而是数据。辅助索引叶子节点存储的是主键的信息。称为聚集索引。

在利用辅助索引的时候,检索到主键信息,然后再通过主键去主索引中定位表中的数据,所以主键不宜用过长的字段,由于所有的辅助索引都包含主索引,很容易让辅助索引变得庞大。

Btree索引中的最左匹配原则:

Btree是按照从左到右的顺序来建立搜索树的。比如索引是(name,age,sex),会先检查name字段,如果name字段相同再去检查后两个字段。

所以当传进来的是后两个字段的数据(age,sex),因为建立搜索树的时候是按照第一个字段建立的,所以必须根据name字段才能知道下一个字段去哪里查询。

所以传进来的是(name,sex)时,首先会根据name指定搜索方向,但是第二个字段缺失,所以将name字段正确的都找到后,然后才会去匹配sex的数据。

建立索引的规则:

1、利用最左前缀:Mysql会一直向右查找直到遇到范围操作(>,<,like、between)就停止匹配。比如a=1 and b=2 and c>3 and d=6;此时如果建立了(a,b,c,d)索引,那么后面的d索引是完全没有用到,当换成了(a,b,d,c)就可以用到。

2、不能过度索引:在修改表内容的时候,索引必须更新或者重构,所以索引过多时,会消耗更多的时间。

3、尽量扩展索引而不要新建索引

4、最适合的索引的列是出现在where子句中的列或连接子句中指定的列。

5、不同值较少的列不必要建立索引(性别)。

参考:Hash索引和BTree索引

Btree索引详解

猜你喜欢

转载自luhantu.iteye.com/blog/2422073