我有这个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键作为索引,但在额外列中我们有“使用位置”,这是什么意思?这是否意味着密钥未被使用?我们在第三行中具有相同的条件....
最后,您对此查询有何看法?是否优化了?
答案 0 :(得分:0)
如果Extra列也显示Using where,则表示索引用于执行键值的查找。如果不使用where,优化器可能正在读取索引以避免读取数据行但不使用它进行查找。例如,如果索引是查询的覆盖索引,则优化程序可以扫描它而不使用它进行查找。
来源:https://dev.mysql.com/doc/refman/5.1/en/explain-output.html