左连接的慢选查询为空并限制结果

时间:2010-10-26 21:06:49

标签: mysql select performance

我有以下查询作为慢速查询记录:

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上的索引键有助于限制行数。我有什么办法可以加快速度呢?

1 个答案:

答案 0 :(得分:2)

您可以在photo_data表中添加一个字段,该字段显示是否已删除该字段,而不必通过加入另一个表来查明此事实。然后,如果您在(deleted, upload_date)上添加索引,那么您的查询应该非常快。