慢查

[慢查优化]慎用MySQL子查询,尤其是看到DEPENDENT SUBQUERY标记时

风流意气都作罢 提交于 2019-11-27 07:16:21
案例梳理时间:2013-9-25 写在前面的话: 在慢查优化 1 和 2 里都反复强调过 explain 的重要性,但有时候肉眼看不出 explain 结果如何指导优化,这时候还需要有一些其他基础知识的佐助, 甚至需要了解 MySQL 实现原理,如子查询慢查优化 。 看到 SQL 执行计划中 select_type 字段中出现“ DEPENDENT SUBQUERY ”时,要打起精神了! ——MySQL 的子查询为什么有时候很糟糕—— 引子:这样的子查询为什么这么慢? 下面的例子是一个慢查,线上执行时间相当夸张。为什么呢? SELECT gid,COUNT(id) as count FROM shop_goods g1 WHERE status =0 and gid IN ( SELECT gid FROM shop_goods g2 WHERE sid IN (1519066,1466114,1466110,1466102,1466071,1453929) ) GROUP BY gid; 它的执行计划如下,请注意看关键词“DEPENDENT SUBQUERY”: id select_type table type possible_keys key key_len ref rows Extra ------ ------------------ ------ ----------