Два набора одинаковых таблиц с объединениями, использующими индексы в MySQL; требуется полное сканирование таблицы
Я очень запутался с индексами в MySQL.
У меня есть две таблицы: TableA1 и TableA2.
Я создал для них индексы для соединений между ними, и запросы выполняются очень быстро.
У меня есть еще 2 таблицы с идентичной настройкой, например TableB1 и TableB2. Разница лишь в том, что эти таблицы имеют несколько нулевых значений.
По какой-то причине тот же запрос к TableA выполняется примерно в 5 раз быстрее и не требует полного сканирования таблицы. Однако TableB, похоже, использует полное сканирование таблицы, и я не могу понять, почему. Это могут быть нулевые значения, которые вызывают это?
Я заметил, используя EXPLAIN, что при установке TableA я получаю possible keys: myindex
а также ref: func
; Однако на установке TableB я получаю только possible keys: NULL
а также ref: NULL
,
Я долго обыскивал это, и, похоже, не могу найти подходящий ответ. Был бы признателен, если кто-то может указать мне в правильном направлении.
(Извините, теперь добавлен к исходному вопросу.)
Вот TableAOne:
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.
Ура,
Ke
1 ответ
Я просто удалил таблицу и переустановил ее в базу данных (я изменил utf8 на latin1, не уверен, что это что-то изменило), однако теперь это работает, действительно странно! большое спасибо за все ответы, которые они, безусловно, подтолкнули меня к ответу "ура":)