sunyang
Новичок
Есть продуктовая табличка со значениями:
Делаю элементарный запрос:
Выводит:
select_type: SIMPLE
table: product_2
type: ALL
possible_keys: catalog_id
key: NULL
key_len: NULL
ref: NULL
rows: 10
Extra: Using where
Ключ catalog_id не использует, пробегает по всем записям. Почему мускул не хочет использовать индекс?
Работает только так:
Не пойму, где я туплю. Буду признателен за совет.
Код:
CREATE TABLE IF NOT EXISTS `product_2` (
`id` int(11) NOT NULL,
`catalog_id` int(11) NOT NULL,
`name` varchar(128) NOT NULL,
`active` tinyint(1) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
KEY `catalog_id` (`catalog_id`),
KEY `active` (`active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
--
-- Дамп данных таблицы `product_2`
--
INSERT INTO `product_2` (`id`, `catalog_id`, `name`, `active`) VALUES
(1, 12, 'prod 1', 1),
(2, 12, 'prod 2', 1),
(3, 12, 'prod 3', 1),
(4, 12, 'prod 4', 1),
(5, 12, 'prod 5', 0),
(6, 12, 'prod 6', 0),
(7, 12, 'prod 7', 1),
(8, 13, 'prod 8', 1),
(9, 13, 'prod 9', 1),
(10, 13, 'prod 10', 1);
Код:
EXPLAIN SELECT * FROM `product_2` p WHERE p.catalog_id = 12
select_type: SIMPLE
table: product_2
type: ALL
possible_keys: catalog_id
key: NULL
key_len: NULL
ref: NULL
rows: 10
Extra: Using where
Ключ catalog_id не использует, пробегает по всем записям. Почему мускул не хочет использовать индекс?
Работает только так:
Код:
SELECT * FROM `product_2` p FORCE INDEX (catalog_id) WHERE p.catalog_id = 12