Индекс нескольких столбцов медленнее, чем индекс одного столбца в mysql - PullRequest
1 голос
/ 28 октября 2011

У меня есть таблица myisam с первичным ключом, охватывающим 5 столбцов.Я делаю выбор, используя WHERE на каждом из этих 5 столбцов ANDed.Использование первичного ключа (многоколоночного индекса) занимает 25 с, при использовании одного индекса в одном из столбцов - 1 с.Я выполнил профилирование, и большая часть из 25-х проходит в стадии «Отправка данных».Первичный ключ имеет количество элементов около 7M и один столбец около 80. Я что-то пропустил?

CREATE TABLE `mytable` (
  `a` int(11) unsigned NOT NULL,
  `b` varchar(2) NOT NULL,
  `c` int(11) unsigned NOT NULL,
  `d` varchar(560) NOT NULL,
  `e` varchar(45) NOT NULL,
  PRIMARY KEY (`a`,`e`,`d`,`b`,`c`),
  KEY `d` (`d`),
  KEY `e` (`e`),
  KEY `b` (`b`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


EXPLAIN SELECT * FROM mytable USE INDEX (PRIMARY)
WHERE a=12 AND e=1319677200 AND d='69.171.242.53' AND b='*' AND c=0;

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  i   ref PRIMARY PRIMARY 4   const   5912231 Using where


EXPLAIN SELECT * FROM mytable
WHERE a=12 AND e=1319677200 AND d='69.171.242.53' AND b='*' AND c=0;

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   SIMPLE  i   ref PRIMARY,d,e,b   d   562 const   158951  Using where

1 Ответ

2 голосов
/ 28 октября 2011

Проблема вызвана приведением,
попробуйте указать каждый столбец varchar b,d,e

SELECT * FROM mytable USE INDEX (PRIMARY)
WHERE a=12 AND e='1319677200' AND d='69.171.242.53' AND b='*' AND c=0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...