我曾经这样做:为什么MySQL不使用这个子查询的索引?
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'语句。
我对在layers
表ownerID
和collectionID
列单独的索引,并在drawings
表中的列layerID
。
我在做什么错我的查询?
这样做了,谢谢。我会尽量避免使用子查询,而是通过连接练习更多。只是子查询一开始就比较容易理解。 – davr 2008-11-13 21:21:19