Due insiemi di tabelle identiche con join utilizzando gli indici in MySQL; uno richiede scansione full-table
-
20-09-2019 - |
Domanda
Im ottenendo molto confuso con gli indici in MySQL.
Ho due tabelle:. TableA1 e TableA2
ho creato gli indici su queste per le giunzioni tra di loro e le query correre veramente veloce.
ho altri 2 tavoli con una configurazione identica esempio TableB1 e TableB2. L'unica differenza è che queste tabelle hanno un paio di valori nulli.
Per qualche ragione la stessa query su TableA è di circa 5 volte più veloce e non richiede una scansione completa-tavolo. TableB tuttavia sembra utilizzare una scansione completa della tabella e non riesco a capire perché. Potrebbe essere i valori Null che stanno causando questo?
Ho notato utilizzando spiegare che sulla messa a punto TableA, ottengo possible keys: myindex
e anche ref: func
; tuttavia sulla messa a punto TableB ottengo solo possible keys: NULL
e ref: NULL
.
Ho cercato in giro per un bel po 'su questo, e non riesco a trovare una risposta rilevante. Gradirei se qualcuno mi può puntare nella giusta direzione.
(Sorry, ora aggiunto alla domanda iniziale.)
Ecco TableAOne:
CREATE TABLE `TableAOne` (
`field1` varchar(255) DEFAULT NULL,
`field2` varchar(255) DEFAULT NULL,
KEY `myindex` (`field1`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
E 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;
Mi iscrivo Campo3 con Field1.
Le tabelle che ottengono la scansione completa-tavolo sono identici alle tabelle di cui sopra. L'unica differenza è che sono chiamati TableB invece di TableA.
Saluti,
Ke
Soluzione
Ho appena cancellato la tavola e ri-installato al db (ho cambiato utf8 a latin1 non so se questo ha fatto la differenza), ma funziona ora, davvero strano! grazie v mille per tutte le risposte che certamente mi ha spinto verso gli applausi di risposta:)