如下表结构这怎么MySQL查询优化
images data
------------------ ----------------------------------
| id | filename | | fromImageId | toImageId | result |
------------------ ----------------------------------
我有以下SELECT
获得所有images.filename
没有在data
一个条目(或者fromImageId
或toImageId
)
SELECT image.id, image.filename
FROM images image
WHERE NOT EXISTS(
SELECT fromImageId, toImageId
FROM data results
WHERE fromImageId = image.id
OR toImageId = image.id
) ORDER BY image.id
由于data
表格非常大(500,000+),因此此查询花费很长时间来计算(大约10-15秒)。
我很确定这里有很多优化工作要做,但是我无法理解我可以做什么来优化查询。
PS:images.id
是PRIMARY KEY
两者fromImageId
和toImageId
上images.id
您对fromImageId和toImageId列有索引吗? – Hiro2k 2012-03-30 14:34:43
我总是对SQL中'OR'子句的效率持怀疑态度。也许尝试重写这两个查询,一个forImage和一个toImage,然后相交结果? – KernelM 2012-03-30 14:38:10