Два набора одинаковых таблиц с объединениями, использующими индексы в 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, не уверен, что это что-то изменило), однако теперь это работает, действительно странно! большое спасибо за все ответы, которые они, безусловно, подтолкнули меня к ответу "ура":)

Другие вопросы по тегам