И снова здравствуйте.
Я помню мне объясняли уже здесь, что при 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)