Два набора одинаковых таблиц с соединениями с использованием индексов в MySQL;требуется полное сканирование таблицы
-
20-09-2019 - |
Вопрос
Меня очень путает индексы в MySQL.
У меня есть две таблицы:ТаблицаА1 и ТаблицаА2.
Я создал для них индексы для соединений между ними, и запросы выполняются очень быстро.
У меня есть еще 2 таблицы с одинаковой настройкой, например.ТаблицаB1 и ТаблицаB2.Единственное отличие состоит в том, что эти таблицы содержат несколько нулевых значений.
По какой-то причине тот же запрос к TableA выполняется примерно в 5 раз быстрее и не требует полного сканирования таблицы.Однако TableB, похоже, использует полное сканирование таблицы, и я не могу понять, почему.Могут ли это быть вызваны значениями Null?
Я заметил, что с помощью 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;
И ТаблицаATwo:
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.
Ваше здоровье,
Ке
Решение
Я просто удалил таблицу и переустановил ее в базу данных (я изменил utf8 на latin1, не уверен, что это имеет значение), однако сейчас это работает, очень странно!большое спасибо за все ответы, они определенно подтолкнули меня к ответу, ура :)