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:
e che la mia tabella ha questi record:codice:giallo, verde, marrone, rosso, viola, azzurro.
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
Lui mi dice che ha effettivamente usato l'indice del colore e ha quindi scansionato solo 2 righe. Bene.Codice PHP:explain
SELECT * FROM tabella where colore = 'giallo' or colore 'rosso' order by utente
Ma se all'OR ne aggiungo un'altra tipo
l'explain dice che seppur l'indice c'è ha dovuto scansionare tutta la tabellaCodice PHP:explain
SELECT * FROM tabella where colore = 'giallo' or colore = 'rosso' or colore = 'viola' order by utente
Ma perchè??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
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

Rispondi quotando