1.数据库索引常用数据结构有两种:Hash索引与B+Tree索引
Hash索引:查询速度高于B+Tree,但不支持范围查询,通常检索需要次数两到三次,是通过字段key进 行hash计算,插入对应hash槽中,如果计算值相等,会形成单链表方式存储。
B+Tree索引:在B-Tree结构上进行优化,所有key经过排序后,非叶子节点不存储data,只存储索 引,所有值存储在叶子节点,叶子节点包含所有索引字段,形成双向链表
2.查询时什么情况下会导致索引失效?
1.使用等值查询字符串没有带分号(会导致隐式类型转换)
2.模糊匹配查询的百分号在前面会导致索引失效
3.联合索引没有遵循最左前缀法则,或者跳过中间字段会导致后面索引失效,不是全部失效(联合索引失效)
4.使用函数运算失效
5.使用范围查询大于号会失效,尽量使用大于等于,小于,小于等于
6.使用or连接条件,如果一侧有索引一侧没有索引会导致索引失效
7.如果MySql评估走全表扫描比走索引快会优先选择全表扫描,使索引失效
3.索引分类
分类 | 含义 | 特点 | 关键字 |
主键索引 | 针对表中主键创建索引 | 默认创建,只能有一个 | PRIMARY |
唯一索引 | 避免同一个表中某数据列中值重复 | 可以有多个 | UNIQUE |
常规索引 | 快速定位特定数据 | 可以有多个 | |
全文索引 | 全文索引查找的是文本中的关键字,而不是比较索引中的值 | 可以有多个 | FULLTEXT |