Я очень запутался с индексами в MySQL.
У меня есть две таблицы: TableA1 и TableA2.
Я создал для них индексы для соединений между ними, и запросы выполняются очень быстро.
У меня есть еще 2 таблицы с идентичной настройкой, например Таблица B1 и Таблица B2. Разница лишь в том, что эти таблицы имеют несколько нулевых значений.
По какой-то причине тот же запрос в TableA выполняется примерно в 5 раз быстрее и не требует полного сканирования таблицы. Однако TableB, похоже, использует полное сканирование таблицы, и я не могу понять, почему. Это могут быть нулевые значения, которые вызывают это?
Я заметил, используя EXPLAIN, что при установке TableA я получаю possible keys: myindex
, а также ref: func
; однако при настройке TableB я получаю только possible keys: NULL
и ref: NULL
.
Я довольно долго обыскивал это, и, похоже, не могу найти подходящий ответ. Был бы признателен, если бы кто-то указал мне правильное направление.
(Извините, теперь добавлен к исходному вопросу.)
Вот таблица №:
CREATE TABLE `TableAOne` (
`field1` varchar(255) DEFAULT NULL,
`field2` varchar(255) DEFAULT NULL,
KEY `myindex` (`field1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
и TableATwo:
CREATE TABLE `TableATwo` (
`Field3` varchar(255) ,
`Field4` varchar(255) ,
`Field5` varchar(255) ,
`id` int(20) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=15522 DEFAULT CHARSET=utf8;
Я присоединяюсь к Field3 с Field1.
Таблицы, которые получают полное сканирование таблицы, идентичны приведенным выше таблицам. Разница лишь в том, что они называются TableB вместо TableA.
Приветствия
Ке