我应该将哪些列编入索引?

时间:2016-07-26 01:18:34

标签: mysql sql

我的查询需要花费很长时间才能执行。这是查询:

SELECT *
FROM `posts`
WHERE `posts`.`id` IN (... MANY MANY DOZENS OF IDs ...)
ORDER BY `created_at` DESC;

我会仅在ididcreated_at创建索引吗?

1 个答案:

答案 0 :(得分:1)

对于您的查询,仅posts(id)上的索引最佳。如果列表中只有一个id,那么您可以执行posts(id, creaated_at)

如果order by占用大部分时间,您可以尝试以下版本:

select p.*
from (select p.*
      from posts p
      order by created_at desc
     ) p
where p.id in (. . .);

在某些情况下,如果您在posts(created_at)上有索引,则可能会阻止排序。我对此公式并不感到兴奋,因为它取决于返回有序结果的子查询 - 这在MySQL的实践中有效。