欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql索引知识备注

程序员文章站 2022-04-10 12:01:18
...

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索引详解

相关标签: mysql 索引