【问题标题】:Does "using where" mean bad MySQL query?“在哪里使用”是否意味着错误的 MySQL 查询?
【发布时间】:2012-09-30 06:55:07
【问题描述】:

我有这个 MySQL 查询:

EXPLAIN EXTENDED 
SELECT img.id as iid,img.*,users.*,img.ave_rate as arate,img.count_rate as cn
FROM images AS img 
LEFT OUTER JOIN users on img.uid=users.id

WHERE img.id NOT IN (SELECT rates.imageid from rates WHERE rates.ip=1854604622) 
GROUP BY iid

ORDER BY
iid DESC
LIMIT 30

它的输出是这样的:

1   PRIMARY             img     index       NULL         PRIMARY    4   NULL                30  580    Using where
1   PRIMARY             users   eq_ref      PRIMARY      PRIMARY    4   twtgirls3.img.uid   1   100 
2   DEPENDENT SUBQUERY  rates   ref         imageid,ip   ip         5   const               4   100    Using where

正如您在第一行中看到的那样,它使用 PRIMARY 键作为索引,但在额外的列中我们有“Using Where”,这是什么意思?这是否意味着未使用密钥?我们在第三行也有同样的条件......

最后,您对这个查询有何看法?优化了吗?

【问题讨论】:

    标签: mysql optimization


    【解决方案1】:

    如果 Extra 列还显示 Using where,则表示索引正在用于执行键值查找。如果不使用 where,优化器可能会读取索引以避免读取数据行,但不会将其用于查找。例如,如果索引是查询的覆盖索引,优化器可能会扫描它而不使用它进行查找。

    来源:https://dev.mysql.com/doc/refman/5.1/en/explain-output.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 2020-12-17
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多