为什么使用索引
- 1、大大减少了服务器需要扫描的数据量
- 2、帮助服务器避免排序和临时表
- 3、将随机io变成顺序io
索引的用处
- 1、快速查找匹配WHERE子句的行
- 2、从consideration中消除行,如果可以在多个索引之间进行选择,mysql通常会使用找到最少行的索引
- 3、如果表具有多列索引,则优化器可以使用索引的任何最左前缀来查找行
- 4、当有表连接的时候,从其他表检索行数据
- 5、查找特定索引列的min或max值
- 6、如果排序或分组时在可用索引的最左前缀上完成的,则对表进行排序和分组
- 7、在某些情况下,可以优化查询以检索值而无需查询数据行
索引的分类
主键索引
- 主键索引树上挂着数据,其他索引上面挂着主键的值,如果不用主键去检索数据的话,就可能发生回表的现象
唯一索引
- 1.主键索引一定是唯一索引,唯一索引不一定是主键索引,
- 2.唯一索引可以为空,主键索引不能为空
普通索引
全文索引
- 只在char、varchar和text的字段上
- 之前只在myisam,mysql5.6及其以后开始支持Innodb
- FULLTEXT KEY
name
(name
,nickname
)
组合索引
- 例如(age,name),这样的组合索引,会使用最左匹配的方式去使用组合索引,如果左边的索引没有匹配上,那么就会不会用到索引——这就是最左匹配原则
- 最左匹配原则
索引的延伸
回表
当通过非主键索引去查询的数据中不包含主键,这个时候就会先去查询出主键的值,再通过主键的值回到主键索引值去查询对应主键的数据,这个现象就是回表