Dois conjuntos de tabelas indenticais com junções usando índices no MySQL; um requer varredura de tabela completa
-
20-09-2019 - |
Pergunta
Estou ficando muito confuso com os índices no MySQL.
Eu tenho duas tabelas: tablea1 e tablea2.
Criei índices sobre isso para as junções entre eles e as consultas correm muito rápido.
Eu tenho outras 2 tabelas com uma configuração idêntica EG TABLEB1 e TABLEB2. A única diferença é que essas tabelas têm alguns valores nulos.
Por alguma razão, a mesma consulta no Tablea é cerca de 5 vezes mais rápida e não requer uma varredura de mesa completa. A Tabelab, no entanto, parece usar uma varredura completa da tabela e não consigo descobrir o porquê. Poderia ser os valores nulos que estão causando isso?
Percebo usando explicar que, na configuração de tablea, eu entendo possible keys: myindex
e também ref: func
; No entanto, na configuração da tabela, eu recebo apenas possible keys: NULL
e ref: NULL
.
Eu procurei por um bom tempo nisso e não consigo encontrar uma resposta relevante. Agradeceria se alguém pudesse me apontar na direção certa.
(Desculpe, agora adicionado à pergunta original.)
Aqui está TableaOne:
CREATE TABLE `TableAOne` (
`field1` varchar(255) DEFAULT NULL,
`field2` varchar(255) DEFAULT NULL,
KEY `myindex` (`field1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
E tabelwo:
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;
Estou ingressando no Field3 com o campo1.
As tabelas que obtêm a varredura de mesa completa são idênticas às tabelas acima. A única diferença é que eles são chamados de tabela em vez de tablea.
Saúde,
Ke
Solução
Acabei de excluir a mesa e reinstalei-a para o banco de dados (eu mudei o UTF8 para Latin1 não tenho certeza se isso fez a diferença), no entanto, agora funciona, muito estranho! Muito obrigado por todas as respostas que eles certamente me empurraram em direção à resposta, aplausos :)