在" SELECT .. FROM .. WHERE列中使用ORDER BY的索引IN(...)ORDER BY"

时间:2017-02-25 09:10:38

标签: mysql

有没有办法让以下查询使用索引而不使用filesort:

SELECT c1 FROM table WHERE c2 IN (val_1, val_2, ..., val_n) ORDER BY c3

我猜机会很糟糕所以如果不可能有任何方法可以使用索引(或快速)使以下问题:

该表包含来自用户的评论:

CREATE TABLE `comments` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` int(10) unsigned NOT NULL,
  `comment` varchar(180) CHARACTER SET utf8 NOT NULL,
  `timestamp` int(11) unsigned NOT NULL)

  ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

我想输出按时间戳排序的特定用户(例如user_x所关注的用户)的评论(比较上面的查询)。

我可以想象的唯一方法是快速进行此查询是插入一个新变量,该变量设置为1,表示最后一个,例如单个用户的15个条目。因此第一个查询每个用户最多只能获得15行,因此mysql必须订购的最大行数为15 * n,其中n是从中选择注释的用户数量。

编辑:这是EXPLAIN输出的内容:

id  select_type table    type   possible_keys                   key                             key_len   ref   rows    Extra
1   SIMPLE      comments range  idx_comments_user_id_timestamp  idx_comments_user_id_timestamp  4         NULL  1113    Using where; Using index; Using filesort

0 个答案:

没有答案