不得不说,博客园这个文章格式搞得真变扭,感觉不如word好用。这次就解释下面8个问题。1.慢查询、2.索引相关、3.聚簇索引与非聚簇索引、4。回表查询与覆盖索引。(格式无所谓了,就这样写吧)
1.慢查询:
在项目中,我们一般会对其中业务分析其运行时间。对于时间长的业务,分析是否是慢sql导致。定位慢查询的话,运维有Skywalkin工具。我们一般是通过sql中自带的慢sql文件。查到对于的sql,并用explain去分析这条sql语句。(慢查询sql的判定时间可以在conf配置文件中自定义)。判断其中的key,key_len字段是否命中索引、type字段是否为全索引扫描或全表扫描、extra字段是否有回表查询。
2.索引
本质是一种优化数据查询的数据结构。其提高了数据的检索效率、降低了数据库的IO交互,同时还对数据提供了排序,降低排序成本。
mysql默认存储引擎Innodb库采用的B+树作为索引的数据结构,B+树的节点可以有多个子节点,可以降低树的高度。同时B+树的非叶子节点不存储数据,只存储键值和指针。在叶子节点存储数据,其中数据用双向链表链接方便范围查找和扫描。
对于B树,节点存储了键值、数据、指针。并且数据间没有形成双向链表
关于使用索引:
1.数据量要大,因为索引要额外维护空间
2.对于长文本字段,可以进行前缀索引
3.对区分度明显的字段设置索引
4.经常排序、分组的字段
5.经常用复合索引,覆盖sql返回值
6.控制索引数量,索引会减低增删改的效率
3.聚簇索引与非聚簇索引
聚簇索引:默认的索引,是用主键创建的索引,B+树叶子节点返回的是当前行的所有数据 (唯一)
非聚簇索引(二级索引):自定义的索引,B+树叶子节点返回的是当前表的主键
4.回表查询与覆盖索引
非聚簇索引无法返回sql查询的所有返回值。于是得到主键后再经行一次聚簇索引,得到当前行的数据
覆盖索引便是非聚簇索引直接命中了sql的返回值,不需要回表
标签:聚簇,索引,mysql,查询,回表,面试,sql,实习,节点 From: https://www.cnblogs.com/kai0fang0/p/18491513