Влияние перечисляемых полей в SELECT'e на производительность MySQL

Таблица items_set ~ 87 000 000 строк (10 ГБ)
CREATE TABLE `items_set` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `items_set_id` bigint(20) NOT NULL,
  `catalog_id` bigint(20) NOT NULL,
  `item_id` bigint(20) NOT NULL,
  `original_item_code` varchar(255) DEFAULT NULL,
  `quantity` bigint(20) unsigned NOT NULL DEFAULT '1',
  `mask` varchar(255) NOT NULL,
  `description_ru` varchar(255) DEFAULT NULL,
  `description_en` varchar(255) DEFAULT NULL,
  `description_ja` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`,`item_id`),
  KEY `catalog_id_and_items_set_id_idx` (`catalog_id`,`items_set_id`) USING BTREE,
  KEY `original_item_code_idx` (`original_item_code`) USING BTREE,
  KEY `items_set_id_idx` (`items_set_id`) USING BTREE,
  KEY `item_id_idx` (`item_id`) USING BTREE,
  KEY `catalog_id_idx` (`catalog_id`) USING BTREE,
  KEY `item_id` (`item_id`,`catalog_id`),
  KEY `item_id_2` (`item_id`,`items_set_id`)
) ENGINE=InnoDB AUTO_INCREMENT=431611457 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

Выбираем данные простым запросом.
Получаем время выполнения ~8 сек. Возвращено ~10 000 записей.
SELECT SQL_NO_CACHE
catalog_id, items_set_id, mask 
FROM items_set 
WHERE item_id = 741761

Меняем запрос.
Получаем время выполнения < 1 сек. Возвращено ~10 000 записей.
SELECT SQL_NO_CACHE
* 
FROM items_set 
WHERE item_id = 741761


Почему такая разница между перечислением полей и *.
Перезагружал MySQL. Отключал кэш. Менял местами запросы. Ничего не изменилось.
Спасибо.
  • Вопрос задан
  • 3021 просмотр
Пригласить эксперта
Ответы на вопрос 3
SELECT SQL_NO_CACHE
items_set_id, catalog_id, mask
FROM items_set
WHERE item_id = 741761
За какое время будет выполнен такой запрос?

Можешь показать вывод explain
Этого запроса
EXPLAIN SELECT SQL_NO_CACHE
catalog_id, items_set_id, mask
FROM items_set
WHERE item_id = 741761
и
EXPLAIN SELECT SQL_NO_CACHE
*
FROM items_set
WHERE item_id = 741761
Ответ написан
Скорее всего, это вызвано наличием в запросе полей varchar.
Ответ написан
Комментировать
alekciy
@alekciy
Вёбных дел мастер
А разве ни кого не смутило, что у автора первичный ключ составной и во WHERE используется вторая часть ключа?

@cookie по сути первичный ключ в данных запроса не работает.
Ответ написан
Ваш ответ на вопрос

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

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