当前位置:  开发笔记 > 编程语言 > 正文

为什么MySQL不使用此子查询的索引?

如何解决《为什么MySQL不使用此子查询的索引?》经验,为你挑选了1个好方法。

我曾经这样做过:

SELECT layerID
FROM layers
WHERE ownerID = ?
AND collectionID = ?

哪个会给我一个layerID的数组,然后我循环并为每个执行此操作:

SELECT DATA
FROM drawings
WHERE layerID = ?

这一切都很好.所以现在我试图一步到位,所以我试试这个:

SELECT DATA , layerID
FROM drawings
WHERE layerID = ANY (
  SELECT layerID
  FROM layers
  WHERE ownerID = ?
  AND collectionID = ?
) 

但由于某种原因,它不使用索引,对于主查询,SELECT DATA etc!因此,这个组合查询需要花费更长的时间来完成,而不是之前我做过的单独查询.(顺便说一句,子查询SELECT layerID etc仍然使用索引).

我已经通过使用'EXPLAIN'语句确定它是否正在使用查询.

我对个别指标ownerIDcollectionID在列layers表中,并在layerIDdrawings表.

我的查询错误是什么?



1> dkretz..:

尝试加入.ANY最终看起来很像查询优化器的不可优化的UNION.

SELECT d.DATA, d.layerID  
FROM drawings AS d  
INNER JOIN layers AS l ON d.layerID = l.layerID  
WHERE l.ownerID = ? AND l.collectionID = ?

推荐阅读
云聪京初瑞子_617
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有