Rin
*
MySQL неверно выбирает индекс в запросе
Есть таблица в БД (MySQL-5.0.45-community-nt):
В этом запросе оптимизатор MySQL неверно выбирает индекс, что плохо сказывается на скорости выборки на большом кол-ве рядов.
Замечу, что подобные запросы, где есть условие WHERE и ограничение LIMIT обычно наиболее используемые при разработке веб-сайтов (постраничный вывод каких-либо списков: новости, форум, ...).
Думаю, что есть способ научить оптимизатор правильно выбирать индекс в подобных запросах.
Интересно, как обстоит дело с выбором индекса в других БД?
Если там все хорошо, я напишу разработчикам.
Есть таблица в БД (MySQL-5.0.45-community-nt):
Код:
CREATE TABLE `t` (
`id` int(10) unsigned NOT NULL auto_increment,
`page_id` int(10) unsigned default NULL,
`created` timestamp NOT NULL default CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `created` (`created`),
KEY `page_id` (`page_id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;
/*!40000 ALTER TABLE `t` DISABLE KEYS */;
INSERT INTO `t` (`id`,`page_id`,`created`) VALUES
(1,1,'2007-10-28 19:36:15'),
(2,3,'2007-10-28 19:37:03'),
(3,3,'2007-10-28 19:37:08'),
(4,3,'2007-10-28 19:37:09'),
(5,3,'2007-10-28 19:37:09'),
(6,3,'2007-10-28 19:37:10'),
(7,3,'2007-10-28 19:37:10'),
(8,3,'2007-10-28 19:37:11'),
(9,3,'2007-10-28 19:37:11'),
(10,3,'2007-10-28 19:37:16'),
(11,3,'2007-10-28 19:37:17'),
(12,3,'2007-10-28 19:37:17'),
(13,3,'2007-10-28 19:37:17'),
(14,3,'2007-10-28 19:37:20'),
(15,3,'2007-10-28 19:37:21');
/*!40000 ALTER TABLE `t` ENABLE KEYS */;
Код:
EXPLAIN
SELECT *
FROM t -- USE KEY (created) -- правильный ключ
WHERE page_id = 5
ORDER BY created DESC
LIMIT 5;
Думаю, что есть способ научить оптимизатор правильно выбирать индекс в подобных запросах.
Интересно, как обстоит дело с выбором индекса в других БД?
Если там все хорошо, я напишу разработчикам.