如下表結構這怎麼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