SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 27.10.2009 04:47:05

Proger
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 04.09.2008
Сообщений: 172

ORDER BY DESC и FILESORT

И снова здравствуйте.
Я помню мне объясняли уже здесь, что при ORDER BY DESC индексы не срабатывают, но что же делать?

Запрос:

SELECT  `date` ,  `apid` ,  `name` ,  `cid` ,  `text` ,  `pid` ,  `coment` ,  `sub` ,  `trackback` ,  `views`
FROM  `post`
WHERE gid =1
ORDER BY  `apid` DESC
LIMIT 0 , 10


id    select_type    table    type    possible_keys    key    key_len    ref    rows    Extra
1    SIMPLE    post    ref    vindex,gid,navi    navi    4    const    55    Using where; Using filesort

CREATE TABLE IF NOT EXISTS `post` (
  `gid` int(11) NOT NULL,
  `cid` int(11) NOT NULL,
  `apid` int(11) NOT NULL AUTO_INCREMENT,
  `pid` int(11) NOT NULL,
  `name` tinytext NOT NULL,
  `text` longtext NOT NULL,
  `orgtext` longtext NOT NULL,
  `song` varchar(256) NOT NULL,
  `nast` varchar(256) NOT NULL,
  `hoch` varchar(256) NOT NULL,
  `smtr` varchar(256) NOT NULL,
  `date` datetime NOT NULL,
  `editdate` datetime NOT NULL,
  `coment` int(11) NOT NULL,
  `trackback` int(11) NOT NULL,
  `views` int(11) NOT NULL,
  `sub` int(11) NOT NULL,
  `ncom` tinyint(1) NOT NULL,
  PRIMARY KEY (`apid`),
  KEY `vindex` (`gid`,`apid`),
  KEY `gid` (`gid`,`date`),
  KEY `navi` (`gid`,`cid`,`pid`)
) ENGINE=InnoDB  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=167173 ;


Запрос (чем больше таблица) тем медленнее работает, страшновато становиться.
И кстати не понятно почему автомат не выбирает индекс: vindex, а берёт navi?!

ADD: единственным выходом будет создание поля "индекса", которое объединит в себе значения в нужном порядке? Чтобы запрос можно было переделать в ORDER BY ASC?

Отредактированно Proger (27.10.2009 04:51:01)

Неактивен

 

#2 27.10.2009 14:43:12

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: ORDER BY DESC и FILESORT

Вообще, странно; кажется, что тут ничто не должно  мешать использовать
правильный индекс. Попробуйте добавить USE INDEX или FORCE INDEX:
возможно, оптимизатору сносит крышу от обилия индексов, начинающихся
с gid.

Неактивен

 

#3 27.10.2009 20:53:17

Proger
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 04.09.2008
Сообщений: 172

Re: ORDER BY DESC и FILESORT

Хм. Помогло. Теперь только Using where smile
Спасибо!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson