有没有办法让以下查询使用索引而不使用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