1
我有被記錄爲慢速查詢以下查詢:低速選擇查詢與左連接爲null,並且限制導致
EXPLAIN EXTENDED SELECT *
FROM (
`photo_data`
)
LEFT JOIN `deleted_photos` ON `deleted_photos`.`photo_id` = `photo_data`.`photo_id`
WHERE `deleted_photos`.`photo_id` IS NULL
ORDER BY `upload_date` DESC
LIMIT 50
這裏的輸出解釋:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE photo_data index NULL upload_date 8 NULL 142523
1 SIMPLE deleted_photos eq_ref photo_id photo_id 767 tbc.photo_data.photo_id 1 Using where; Not exists
我可以看到它必須通過所有142K記錄才能從數據庫中提取最新的50個記錄。
我有兩個指標:
UNIQUE KEY `photo_id` (`photo_id`),
KEY `upload_date` (`upload_date`)
我希望帽子UPLOAD_DATE索引鍵,將有助於限制的行數。關於我能做些什麼來加速這件事的任何想法?
好,我會給一個去感謝 – 2010-10-26 22:15:45
所以我異型查詢新的一個: 選擇'photo_data'.'photo_id','photo_data'.'image_fullsize','image_thumbnail','photo_description' FROM( 'photo_data') 其中'deleted' = '0' ORDER BY'upload_date'遞減 LIMIT 50 這種新花1.2秒排序....我添加了一個新的索引上刪除... – 2010-10-27 00:02:38
Steudel:你有沒有試着在我的文章中建議在'(deleted,upload_date)'上添加一個組合索引?我不記得創建索引的確切語法,但沿着這些方向:'ALTER TABLE photo_data ADD INDEX deleted_upload_date(deleted,upload_date)'。我認爲這會對查詢的速度產生巨大的影響,因爲它應該從O(n log n)到幾乎O(1)。 – 2010-10-27 09:37:21