
走了
间隙锁是InnoDB在REPEATABLEREAD级别下锁定索引中两值间空档(如(5,10))以防止幻读的机制,仅对范围查询或非唯一索引等值未命中时触发,不阻塞其他间隙锁但会阻塞插入。
key反映优化器选用的索引名,key_len表示实际使用的索引字节数,rows是基于统计信息估算的扫描行数。三者共同体现优化器预估的执行路径成本。
根本原因是非唯一二级索引导致间隙锁或临键锁,即使有索引也会锁住大范围;应优先用UNIQUE索引、避免高频字段单独建索引、用联合索引优化,并确保INSERT...ONDUPLICATEKEYUPDATE...
EXPLAIN是查看MySQL索引使用情况最直接的方法,需关注key(非NULL表示用索引)、type(const/ref/range为走索引,ALL为全表扫描)、rows(远小于总行数说明过滤有效)...
索引是减少磁盘IO的物理手段,本质是排序的“小表”,存列值和数据行地址;B+树结构支持高效查找、范围查询与排序;需依执行计划评估,避免无效索引。
函数下推不保证索引可用,索引生效前提是WHERE中索引列以原始形式参与比较;如UPPER(name)=‘ALICE’无法走name索引,而name=‘alice’可以。
SQL时间函数本身不直接导致索引失效,真正原因是WHERE子句中对日期字段使用函数(如YEAR()、DATE()),使数据库无法利用索引的有序性而被迫全表扫描;正确做法是将函数移至比较值右侧,保持字段...
GROUPBY字段必须为索引最左前缀才能利用B+树有序性加速分组;否则触发Usingfilesort和Usingtemporary,需确保字段顺序匹配复合索引前缀、避免函数运算、优先用区间查询,并通过...
索引回退指优化器放弃使用预期索引而选择低效访问路径,导致性能下降;主因包括统计信息过期、查询条件破坏索引可用性、数据倾斜、隐式类型转换等,需通过执行计划比对与针对性优化解决。
线上SQL事故是多环节松动的集中爆发,复盘重在厘清“为何未拦截”:慢查询监控需执行时间与扫描行数双维度告警并动态调阈值;索引失效主因隐式转换、函数包裹或联合索引顺序错误;高危操作须代理层拦截、审批流程...