1. Mysql中,如何定位慢查询
部署运维监控系统Skywalking,在报表展示中可以看到哪个接口慢,并且能分析出接口中哪部分耗时较多,包括具体的SQL执行时间,这样就能定位到出现问题的SQL。
如果没有这种监控系统,MySQL本身也提供了慢查询日志功能。可以在mysql的系统配置文件中开启慢查询日志,并设置sql执行时间超过多少就记录到日志文件。比如我们之前项目设置的是2秒,超过2秒的sql就好记录在日志文件中,可以在那里找到执行慢的sql。
2. 那这个SQL语句执行很慢,如何分析呢?
如果一条SQL执行很慢,我们通常会使用MySQL的EXPLAIN命令来分析这条SQL的执行情况。通过key和key_len 可以检查是否命中了索引,如果已经添加了索引,也可以判断索引是否有效。通过type 字段可以查看SQL是否有优化空间,比如是否存在全索引扫描或全表扫描。通过extra建议可以判断是否出现回表情况,如果出现,可以尝试添加索引或修改返回字段来优化。
检查EXPLAIN输出的几个关键点:
type:表示访问类型,例如ALL(全表扫描),index(索引扫描),range(范围扫描),ref(非唯一索引扫描)等。尽量避免ALL类型的全表扫描。possible_keys和key:possible_keys显示MySQL可以使用的索引,而key则显示实际使用的索引。如果key为NULL,说明没有使用索引。rows:显示MySQL估计需要检查的行数。这个数字越小越好。Extra:包含额外的信息,如Using filesort或Using temporary,这些通常意味着性能问题。
EXPLAIN SELECT * FROM your_table WHERE your_column = 'some_value';
3. 什么是索引
索引是一种帮助MySQL高效获取数据的数据结构,主要用来提高数据检索效率,降低数据库的I/O成本。同时,索引列可以对数据进行排序,降低数据排序的成本,也能减少CPU的消耗。
4. 索引的底层数据结构了解吗
MySQL的默认存储引擎InnoDB使用的是B+树作为索引l的存储结构。选择B+树的原因包括:节点可以有更多子节点,路径更短;磁盘读写代价更低,非叶子节点只存储键值和指针,叶子节点存储数据;B+树适合范围查询和扫描,因为叶子节点形成了一个双向链表。
5. 5.B树和B+树的区别是什么
B树和B+树的主要区别在于:
1.B树的非叶子节点和叶子节点都存放数据,而B+树的所有数据只出现在叶子节点,这使得B+树在查询时效率更稳定。
2。B+树在进行范围查询时效率更高,因为所有数据都在叶子节点,并且叶子节点之间形成了双向链表。
6. 什么是聚簇索引,什么是非聚簇索引
聚簇索引是指数据与索引放在一起,B+树的叶子节点保存了整行数据,通常只有一个聚簇索引,一般是由主键构成。
非聚簇索引则是数据与索引分开存储,B+树的叶子节点保存的是主键值,可以有多个非聚簇索引,通常我们自定义的索引都是非聚簇索引。
7. 什么是回表查询
回表查询是指通过二级索引找到对应的主键值,然后再通过主键值查询聚簇索引中对应的整行数据的过程。
8. 什么是覆盖索引
覆盖索引是指在SELECT查询中,返回的列全部能在索引中找到,避免了回表查询,提高了性能。使用覆盖索引可以减少对主键索引的查询次数,提高查询效率。