我曾经这样做过:
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'语句确定它是否正在使用查询.
我对个别指标ownerID
和collectionID
在列layers
表中,并在layerID
列drawings
表.
我的查询错误是什么?
尝试加入.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 = ?