如何改进IF NOT NULL查询?

时间:2013-07-21 21:24:58

标签: mysql sql

我有以下查询:

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。

1 个答案:

答案 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)