Можно ли заставить MySQL использовать индекс для ORDER на 1 DESC, 2 ASC?

У меня есть материализованный бюллетень, управляемый путем -. доска. Для упорядочивания сообщений используется следующий запрос:

SELECT * FROM Board ORDER by root DESC, path ASC LIMIT 0,100

, где root— это idкорневого сообщения для потока, а path— это материализованный путь.

Однако ни одна из моих попыток заставить этот запрос использовать индексы не увенчалась успехом.

mysql> explain extended select path from Board order by root desc, path asc limit 100;
+-------+---------------+----------+---------+------+-------+----------+----------------------------+
| type  | possible_keys | key      | key_len | ref  | rows  | filtered | Extra
+-------+---------------+----------+---------+------+-------+----------+-----------------------------
| index | NULL          | rootpath | 261     | NULL | 21998 |   100.00 | Using index; Using filesort

На данный момент он показывает количество всех строк в таблице в столбце rows. Мне интересно, есть ли способ уменьшить это число или оптимизировать запрос каким-либо другим способом?

CREATE TABLE `Board` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `path` varchar(255) NOT NULL DEFAULT '0',
  `root` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `root` (`root`),
  KEY `path` (`path`),
  KEY `rootpath` (`root`,`path`)
)

Основная проблема с запросом — разбиение на страницы. -Мне нужно начать вторую страницу прямо с сообщения, следующего за последним на предыдущей странице. Вот почему я хочу прямого пути -без сублектов и прочего.
Хотя текущая настройка не совсем приятна, так как начинается вторая страница с середины ветки, но, по крайней мере, вполне логична.

19
задан Peter Mortensen 10 July 2015 в 17:57
поделиться