我有以下查询作为慢速查询记录:
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`)
我希望hat_date上的索引键有助于限制行数。我有什么办法可以加快速度呢?
答案 0 :(得分:2)
您可以在photo_data
表中添加一个字段,该字段显示是否已删除该字段,而不必通过加入另一个表来查明此事实。然后,如果您在(deleted, upload_date)
上添加索引,那么您的查询应该非常快。