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

dav*_*avr 0 mysql indexing optimization subquery

我曾经这样做过:

SELECT layerID
FROM layers
WHERE ownerID = ?
AND collectionID = ?
Run Code Online (Sandbox Code Playgroud)

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

SELECT DATA
FROM drawings
WHERE layerID = ?
Run Code Online (Sandbox Code Playgroud)

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

SELECT DATA , layerID
FROM drawings
WHERE layerID = ANY (
  SELECT layerID
  FROM layers
  WHERE ownerID = ?
  AND collectionID = ?
) 
Run Code Online (Sandbox Code Playgroud)

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

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

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

我的查询错误是什么?

dkr*_*etz 5

尝试加入.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 = ?
Run Code Online (Sandbox Code Playgroud)