Ciao a tutti,
c'è una cosa che mi sta facendo impazzire alla quale non so darmi risposta.
Ho una tabella con il campo "colori" per la quale ho creato un indice.
Premetto che già dalle cardinalità noto che mysql, non so perchè, non mi indicizza bene questa chiave - che è varchar(30) non univoca -.
Ovvero.
Presuppondendo che il mio indice è fatto da tot colori:
codice:
giallo, verde, marrone, rosso, viola, azzurro.
e che la mia tabella ha questi record:
Paolo | giallo
Marco | giallo
Stefano | rosso
Valeria | viola
La cardinalità corretta dell'indice che dovrei vedere (anche dopo aver ottimizzato la tabella) sarebbe 3, ma io vedo 4.
Va beh, strano. Ma andiamo avanti.
Ora se faccio una query con l'explain esempio
Codice PHP:
explain
SELECT * FROM tabella where colore = 'giallo' or colore 'rosso' order by utente
Lui mi dice che ha effettivamente usato l'indice del colore e ha quindi scansionato solo 2 righe. Bene.
Ma se all'OR ne aggiungo un'altra tipo
Codice PHP:
explain
SELECT * FROM tabella where colore = 'giallo' or colore = 'rosso' or colore = 'viola' order by utente
l'explain dice che seppur l'indice c'è ha dovuto scansionare tutta la tabella
codice:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE miatabella ALL tag NULL NULL NULL 11 Using where
Ma perchè??
Eppure ho diverse tabelle "settate" in modo praticamente uguale, in cui, mettendo anche 10 OR, la scansione della tabella viene eseguita seguendo correttamente l'indice.
C'è un motivo?? :master: :master:
Grazie mille