1.什么是索引,了解过索引吗?
1.索引(index)是帮助MYSQL高效获取数据的数据结构(有序)
2.提高数据检索的效率,降低数据库的IO成本(不需要全表扫描)
3.通过索引列队数据进行排序,降低数据排序的成本,降低了CPU的消耗
2.索引的底层数据结构了解过吗?
MYSQL的InnoDB引擎采用的B+树的数据结构
1.阶数更多,路径更短
2.磁盘读写代价B+树更低,非叶子结点只存储指针,叶子阶段存储数据
3.B+树便于扫库和区间查询,叶子结点是一个双向链表
3.什么是聚簇索引 什么是非聚簇索引?
1.聚簇索引(聚集索引):
数据与索引放在一块,B+树的叶子结点保存了整行数据,有且仅有一个
2.非聚簇索引(二级索引):
数据与索引分开存储,B+树的叶子结点保存对应的主键,可以有多个
4.知道什么是回表查询吗?
通过二级索引找到对应的主键值,到聚集索引中查找整行数据,这个过程就是回表
5.那这个SQL语句执行很慢,如何分析呢?
可以采用MYSQL自带的分析工具 explain
1.通过key和key_len检查是否命中了索引(索引本身存在是否有失效的情况)
2.通过type字段查看sql是否有进一步的优化空间,是否存在全索引扫描或全盘扫描
3.通过extra建议判断,是否出现了回表的情况,如果出现了,可以尝试添加索引或修改返回字段来修复
6. 什么情况下索引会失效
1.违反最左前缀原则
2.范围查询右边的列,不能使用索引
3.不要在索引列上进行运算操作,索引将失效
4.字符串不加单引号,造成索引失效 (类型转换)
5.以%开头的like模糊查询,索引失效