У меня есть очень простой SELECT, который прибегает к сортировке файлов и не использует индекс.
Рассмотрим следующий запрос:
SELECT * FROM forum_topic
WHERE topic_status = 0
ORDER BY modified_date LIMIT 0, 30
в следующей таблице (убрано несколько столбцов, чтобы сделать его здесь более кратким)
CREATE TABLE `forum_topic` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`slug` varchar(255) NOT NULL,
`forum_id` int(10) NOT NULL DEFAULT '1',
`title` varchar(100) NOT NULL,
`topic_status` tinyint(1) NOT NULL DEFAULT '0',
`post_count` bigint(20) NOT NULL DEFAULT '0',
`modified_date` datetime NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `slug` (`slug`),
FULLTEXT KEY `title` (`title`),
KEY `modified` (`modified_date`, `topic_status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
EXPLAIN дает следующий вывод
id select_type table? partitions? type? possible_keys? key? key_len? ref? rows? Extra?
1 SIMPLE forum_topic NULL ALL NULL NULL NULL NULL 2075 Using where; Using filesort
Обратите внимание, как в объяснении говорится, что для возможных_ключей есть NULL, и как он использует файловую сортировку после сканирования ВСЕХ строк.
Пожалуйста посоветуй. Спасибо.
modified
может иметь поля в обратном порядке; а сколько рядов? - person Andrew Barber   schedule 17.12.2014