@dummyQuestions

Почему составной индекс в MySQL не используется полностью?

Есть подобная таблица:
CREATE TABLE `test` (
  `id` int(10) unsigned,
  `price` int(10) NOT NULL,
  `product_id` int(10),
  KEY `IdxProductIdPrice` (`product_id`,`price`),
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


Есть такой запрос:
SELECT `price`, `id`, `product_id`
FROM `test`
WHERE `product_id` = 1100 
ORDER BY `price` ASC;


Explain возвращает:
id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
1	SIMPLE	test	ref	IdxProductIdPrice	IdxProductIdPrice	5	const	38000	Using where


Почему составной индекс используется не полностью?
Если перенести эти поля в WHERE часть, то key_len=9, если же перенести в ORDER BY, то вообще индексы не использует, хотя таблица на 1.5 млн записей.
  • Вопрос задан
  • 1032 просмотра
Решения вопроса 1
@BorisKorobkov Куратор тега MySQL
Web developer
Индекс хранится в B-tree.
При = найти нужную запись очень легко.
При > найти нужную ветку гораздо дольше, но все равно быстрее, чем без индекса.
При order by все равно надо перебирать ВСЁ. А это проще сделать без индекса.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы