[数据库] 索引概述
索引对应数据库的一行(记录)或某一个(及多个)字段。
1.索引类型
1)聚集索引:加在行主键上的索引(最常用的索引)
2)非聚集索引:加在普通字段上的索引。
3)联合索引:多个字段组成的索引。
值得注意的是,无论何种索引,均保存在B+树(仅叶子节点保存实际value的值)。
2.索引匹配规则
在查询数据库的时候,常见到这样的语句: select * from student where xxx = xxx and xxx = xxx;
1)如果表中仅有聚集索引,那么会将所有聚集索引对应的记录取出进行扫描找到符合要求的记录。
2)如果仅有非聚集索引,那么仅在where后查询的字段在非聚集索引对应字段时生效。
3)如果有联合索引,那么理论上只要所查询的字段在联合索引记录内即可。
进行 = 判断会被作为一个判断短句,而大小判断和不等于判断则会导致嵌套索引查询。
like关键字在匹配时会采用类似的嵌套索引查询策略(字符和通配符分开)。
值得注意的是,MySQL根据采用的引擎和版本,会有查询优化策略,例如当表数据很少时,很有可能直接采用全表扫描。
3.最左前缀匹配原则
如果有联合索引,那么理论上只要所查询的字段在联合索引记录内即可。
以下情况会使用联合索引:
1)where条件,其中判断的字段在联合索引中(mysql引擎会自动匹配顺序),且逻辑判断符为等于判断。
2)like关键字,%匹配符之前的部分(之后的部分会在取出记录后再次判断)。