博主介绍:✌全网粉丝5W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌
博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+MySQL+Vue等前后端分离项目,可以在左边的分类专栏找到更多项目。《Uniapp项目案例》有几个有uniapp教程,企业实战开发。《微服务实战》专栏是本人的实战经验总结,《Spring家族及微服务系列》专注Spring、SpringMVC、SpringBoot、SpringCloud系列、Nacos等源码解读、热门面试题、架构设计等。除此之外还有不少文章等你来细细品味,更多惊喜等着你哦
🍅uniapp微信小程序🍅面试题软考题免费使用,还可以使用微信支付,扫码加群。由于维护成本问题得不到解决,可能将停止线上维护。
🍅文末获取联系🍅精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟
Java项目案例《100套》
https://blog.csdn.net/qq_57756904/category_12173599.html
uniapp小程序《100套》https://blog.csdn.net/qq_57756904/category_12173599.html
有需求代码永远写不完,而方法才是破解之道,抖音有实战视频课程,某马某千等培训都是2万左右,甚至广东有本科院校单单一年就得3万4年就12万学费,而且还没有包括吃饭的钱。所以很划算了。另外博客左侧有源码阅读专栏,对于求职有很大帮助,当然对于工作也是有指导意义等。在大城市求职,你面试来回一趟多多少少都在12块左右,而且一般不会一次性就通过,还得面试几家。而如果你对源码以及微服务等有深度认识,这无疑给你的面试添砖加瓦更上一层楼。
最后再送一句:最好是学会了,而不是学废了!!
2
如何排查MySQL是否走索引
排查MySQL是否走索引可以通过多种方法,以下是常用的排查手段:
1. 使用EXPLAIN
命令
EXPLAIN
是分析SQL语句执行计划的关键工具,可以查看MySQL是否使用了索引。
-
语法:
EXPLAIN SELECT * FROM table_name WHERE condition;
-
关键字段:
-
type
:表示访问类型,常见值:-
ALL
:全表扫描,未使用索引。 -
index
:全索引扫描。 -
range
:索引范围扫描。 -
ref
:使用非唯一索引查找。 -
eq_ref
:使用唯一索引查找。 -
const
:使用主键或唯一索引查找单行。
-
-
key
:实际使用的索引名称。 -
rows
:扫描的行数,越小越好。 -
Extra
:额外信息,如Using where
、Using index
等。
-
-
示例:
EXPLAIN SELECT * FROM users WHERE age > 30;
如果
key
字段显示索引名称,说明使用了索引;如果type
为ALL
,说明未使用索引。
2. 使用SHOW INDEX
命令
查看表的索引信息,确认索引是否存在。
-
语法:
SHOW INDEX FROM table_name;
-
输出:
-
Table
:表名。 -
Key_name
:索引名称。 -
Column_name
:索引列。 -
Index_type
:索引类型(如BTREE
)。
-
-
示例:
SHOW INDEX FROM users;
确认索引是否存在以及索引的列。
3. 使用OPTIMIZER_TRACE
OPTIMIZER_TRACE
可以查看优化器的详细决策过程,包括是否选择使用索引。
-
启用
OPTIMIZER_TRACE
:SET optimizer_trace="enabled=on";
-
执行查询:
SELECT * FROM users WHERE age > 30;
-
查看跟踪信息:
SELECT * FROM information_schema.optimizer_trace;
-
关闭
OPTIMIZER_TRACE
:SET optimizer_trace="enabled=off";
4. 使用PROFILING
PROFILING
可以查看查询的执行时间,间接判断是否使用了索引。
-
启用
PROFILING
:SET profiling = 1;
-
执行查询:
SELECT * FROM users WHERE age > 30;
-
查看性能分析:
SHOW PROFILES;
-
查看详细执行信息:
SHOW PROFILE FOR QUERY 1;
5. 使用慢查询日志
如果查询较慢,可以通过慢查询日志分析是否未使用索引。
-
启用慢查询日志:
SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 1; -- 设置慢查询阈值(秒)
-
查看慢查询日志路径:
SHOW VARIABLES LIKE 'slow_query_log_file';
-
分析日志:
查看日志中是否有未使用索引的查询。
6. 使用FORCE INDEX
强制使用索引
如果怀疑优化器未选择正确的索引,可以强制使用索引。
-
语法:
SELECT * FROM table_name FORCE INDEX (index_name) WHERE condition;
-
示例:
SELECT * FROM users FORCE INDEX (idx_age) WHERE age > 30;
强制使用
idx_age
索引后,观察查询性能是否提升。
7. 检查索引选择性
索引选择性是指索引列中不同值的比例,选择性越高,索引效果越好。
-
计算选择性:
SELECT COUNT(DISTINCT column_name) / COUNT(*) FROM table_name;
结果越接近1,选择性越高。
8. 检查查询条件
确保查询条件与索引列匹配,避免以下情况:
-
对索引列使用函数或表达式。
-
使用
LIKE
以通配符开头。 -
数据类型不匹配。
9. 使用ANALYZE TABLE
更新统计信息
如果表的统计信息过时,优化器可能无法正确选择索引。
-
语法:
ANALYZE TABLE table_name;
-
示例:
ANALYZE TABLE users;
10. 使用INDEX HINT
提示优化器
通过USE INDEX
或IGNORE INDEX
提示优化器使用或忽略特定索引。
-
语法:
SELECT * FROM table_name USE INDEX (index_name) WHERE condition;
-
示例:
SELECT * FROM users USE INDEX (idx_age) WHERE age > 30;
总结
排查MySQL是否走索引的常用方法包括:
-
使用
EXPLAIN
分析执行计划。 -
使用
SHOW INDEX
查看索引信息。 -
使用
OPTIMIZER_TRACE
查看优化器决策。 -
使用
PROFILING
分析查询性能。 -
检查慢查询日志。
-
强制使用索引(
FORCE INDEX
)。 -
检查索引选择性。
-
确保查询条件与索引匹配。
-
更新统计信息(
ANALYZE TABLE
)。 -
使用索引提示(
USE INDEX
或IGNORE INDEX
)。
通过这些方法,可以快速定位索引使用问题并优化查询性能。
3