我有以下查询:
SELECT * FROM `title_mediaasset`
WHERE upload_id is not null
ORDER BY `upload_date` DESC
这需要几乎一秒钟而且不使用索引:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE title_mediaasset ALL upload_id,upload_id_2 NULL NULL NULL 119216 Using where; Using filesort
如何改进此查询?
此表包含大约100k的结果,明年可能会增加到1M。
答案 0 :(得分:2)
如果您需要结果中的所有行和所有列,则无法重新编写查询以使其更好。它可能运行缓慢,因为您没有upload_date
上的索引。
如果您不需要所有行,请使用LIMIT
,您会在ORDER BY
上看到速度提升。
如果您不需要所有列,请使用SELECT [columns you need]
代替SELECT *
。这样,如果真的需要优化查询,您可以将索引中所需的列放在索引中,以便直接从索引中读取所有内容:index on (upload_id, upload_date, [other columns in select statement])
。
如果您需要所有列或其中很多列,只需添加index on (upload_id, upload_date)
。