serejatoje
@serejatoje

Как оптимизировать запрос mysql?

Всем привет! У меня есть такая табличка:
CREATE TABLE `NewTable` (
`id`  int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'id' ,
`parent_id`  int(11) UNSIGNED NOT NULL COMMENT 'id родителя' ,
`left_key`  int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'смещение слева' ,
`right_key`  int(11) UNSIGNED NOT NULL COMMENT 'смещение справа' ,
`name_ru`  varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'наименование ru' ,
`name_en`  varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'наименование en' ,
`path`  varchar(150) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'хлебные крошки' ,
`level`  int(11) UNSIGNED NOT NULL COMMENT 'уровень' ,
PRIMARY KEY (`left_key`, `id`),
UNIQUE INDEX `id` (`id`) USING BTREE ,
UNIQUE INDEX `left_key` (`left_key`) USING BTREE ,
UNIQUE INDEX `right_key` (`right_key`) USING BTREE ,
INDEX `path` (`path`) USING BTREE ,
INDEX `level` (`level`) USING BTREE 
)
ENGINE=MyISAM
DEFAULT CHARACTER SET=utf8 COLLATE=utf8_general_ci
COMMENT='основной каталог сайта'
AUTO_INCREMENT=358
CHECKSUM=0
ROW_FORMAT=DYNAMIC
DELAY_KEY_WRITE=0
;

А вот запрос:

SELECT
	id,
	name,
	level
FROM
	catalog
WHERE
	left_key >= 303
AND right_key <= 406
ORDER BY
	left_key


Смотрел через Explain - стоблец Rows = 326. На выход идет гораздо меньше данных. Тобишь все поля таблицы задействованы.. Почему так? Я ведь задал where, и индексы прописаны..
  • Вопрос задан
  • 2344 просмотра
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы