【发布时间】:2014-07-17 15:41:46
【问题描述】:
我需要您的帮助来优化查询以避免使用“使用文件排序”。查询是:
SELECT name
FROM actor
WHERE actor_id IN (3333,1452,2587,3003,3044,3524,3700,7087,7088)
ORDER BY name ASC
解释结果:
1 SIMPLE actor range PRIMARY PRIMARY 2 9 Using where; Using filesort
================================================ ==============
SQL 小提琴 http://sqlfiddle.com/#!2/50c4d/1/0
表:
CREATE TABLE `actor` (
`actor_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(45) NOT NULL,
PRIMARY KEY (`actor_id`),
UNIQUE KEY `name_UNIQUE` (`name`)
) ENGINE=InnoDB;
样本数据:
INSERT INTO `actor` VALUES (7087, 'Brill');
INSERT INTO `actor` VALUES (3333, 'Rey');
INSERT INTO `actor` VALUES (7088, 'Graves');
INSERT INTO `actor` VALUES (1452, 'Phoenix');
INSERT INTO `actor` VALUES (2587, 'Segal');
INSERT INTO `actor` VALUES (3003, 'Taylor');
INSERT INTO `actor` VALUES (3044, 'Daniels');
INSERT INTO `actor` VALUES (3524, 'Michaels');
INSERT INTO `actor` VALUES (3700, 'Tryme');
索引:
ADD INDEX idx_test (actor_id, name) -> EXTRA: Using where; Using index; Using filesort
【问题讨论】:
-
那张表中还有更多数据吗?仅使用您提供的数据设置该表时,我只会得到“使用位置;使用索引”
-
是的,我有更多字段,例如 url、thumb、status……但总是额外的:使用文件排序……(有索引,没有索引)……我不知道为什么……
-
@Marcus-Adams sqlfiddle.com/#!2/50c4d/1
标签: mysql performance optimization query-optimization filesort