1. 在myisam和innodb中,索引的区别
在myisam中:主键索引和非主键索引生成的b+tree树的叶子节点都是存储该索引字段的值和整行数据所在的位置。(MyISAM索引文件和数据文件是分离的,索引文件仅保存数据记录的地址)
在innodb中:主键索引生成的b+tree树的叶子节点存储整行数据的值。而非主键索引存储的是该索引字段的值和主键的值。(InnoDB表数据文件同时包含索引和数据信息)
2.覆盖索引和回表查询
-
(1).覆盖索引:
-
①需要查询的字段和where语句里的字段都可以直接通过索引树得到数据。
-
②当explain的输出结果Extra字段为Using index时,为索引覆盖。
(2)回表
-
①通过普通索引到树中查询到主键值
-
②通过得到的主键值回到主键索引树中,得到其他数据的值。如下图所示
3. 唯一索引
字段数据不重复,可以为NULL,因为NULL为未知。数据表可以有多个唯一索引,只能有一个主键索引。
4. hash索引
Hash索引的查询效率要远高于B-Tree索引。是Hash索引本身由于其特殊性也带来了很多限制和弊端.
Hash索引仅仅能满足"=",“IN"和”<=>"查询,不能使用范围查询。
https://www.cnblogs.com/igoodful/p/9361500.html
5.全文检索索引
查询时候会将汉字拆分,不过最好使用ElasticSearch分布式搜索引擎来替代。
6.索引字段为字符串
将字符串的每个字符串转换为ASCII码,从左到右依次匹配。如name,先匹配n,再匹配a,m,e。
7.联合索引
索引名称: index_字段名称1_字段名称2
需要符合最左匹配原则