“ MySQL中的二级索引都要通过访问主键才能访问数据,所以我们在能使用主键访问数据的情况下尽量不要用二级索引,这里是一个例子”
关于号主,姚远:
Oracle ACE(Oracle和MySQL数据库方向)
华为云最有价值专家
《MySQL 8.0运维与优化》的作者
拥有 Oracle 10g、12c和19c OCM等数十项数据库认证
曾任IBM公司数据库部门经理
20+年DBA经验,服务2万+客户
精通C和Java,发明两项计算机专利
01
—
现象

02
—
分析
mysql> select min(start_time),max(start_time) from job_history;+---------------------+---------------------+| min(start_time) | max(start_time) |+---------------------+---------------------+| 2023-12-29 02:36:28 | 2024-01-19 06:44:01 |+---------------------+---------------------+1 row in set (0.02 sec)mysql> show table status like 'job_history'\G*************************** 1. row ***************************Name: job_historyEngine: InnoDBVersion: 10Row_format: DynamicRows: 4819722Avg_row_length: 376Data_length: 1816133632Max_data_length: 0Index_length: 1232748544Data_free: 108003328Auto_increment: 4961289Create_time: 2024-01-23 17:20:22Update_time: NULLCheck_time: NULLCollation: utf8mb4_binChecksum: NULLCreate_options:Comment:1 row in set (0.00 sec)
03
—
优化
start_time > '2024-01-17 02:36:28'
改写成一个等价的条件:
id>=(select max(id) from job_history where start_time < '2024-01-17 02:36:28')
测试一下改写后的SQL的运行效率:

03
—
总结
欢迎加我的微信,拉你进数据库微信群👇

推荐文章👇
试看号主的拙作《MySQL 8.0运维与优化》(清华大学出版社)
文章转载自AustinDatabases,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




