摘要: 和上篇文章不同,文章探讨了我们正常执行sql语句慢的原因:第一:其他进程正在DML写锁,需要kill或等待,第二flush刷盘flush在关闭session途中被别的命令堵住了,进一步堵住select查询,如sleep,第三,在引擎层面update存在且不提交写锁也会被堵住(这边还介绍了kill query与kill的去别,十分实用),第四:查询慢还可以是索引:走主键顺序扫描(可以在慢查询日志里找),第五:就算只扫描一行,但还是慢,还可以是事务一直没提交,造成undolog回滚日志特别长,如果没有加“lock in share mode”,那读取数据得先回滚到上一个版本再读取。 阅读全文
posted @ 2024-09-12 21:54 guixiang 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 该文章中,提出了”有很多看上去逻辑相同,但性能却差异巨大的 SQL 语句”提出索引树罢工的现象分析了三个原因:where后面函数操作,多表查询字段类型冲突,utf-8字符编码冲突(俗称隐式类型转换),正因如此索引就会罢工(explain中key显示NULL),这边还顺便介绍了驱动表(多表查询from后面的是被驱动表),最后要强调的是select * from table where id + 1 = 10000 这个 SQL 语句与select * from table where id = 10000-1(这道题体现文章核心思想) 两者间查询效率相差极大 阅读全文
posted @ 2024-09-12 20:21 guixiang 阅读(11) 评论(0) 推荐(0) 编辑