Mysql
 sql >> Database >  >> RDS >> Mysql

Come cercare righe contenenti una sottostringa?

Bene, puoi sempre provare WHERE textcolumn LIKE "%SUBSTRING%" - ma è garantito che sarà piuttosto lento, poiché la tua query non può eseguire una corrispondenza di indice perché stai cercando caratteri sul lato sinistro.

Dipende dal tipo di campo:un'area di testo di solito non viene salvata come VARCHAR, ma piuttosto come (una specie di) campo TEXT, quindi puoi utilizzare PARTITA CONTRO operatore.

Per ottenere le colonne che non corrispondono, metti semplicemente un NOT davanti al mi piace:WHERE textcolumn NOT LIKE "%SUBSTRING%" .

Se la ricerca fa distinzione tra maiuscole e minuscole o meno dipende da come immagazzini i dati, in particolare da quale COLLEZIONE utilizzi. Per impostazione predefinita, la ricerca non farà distinzione tra maiuscole e minuscole.

Risposta aggiornata per riflettere l'aggiornamento della domanda:

Lo dico facendo un campo WHERE field LIKE "%value%" è più lento di WHERE field LIKE "value%" se il campo della colonna ha un indice, ma questo è ancora notevolmente più veloce rispetto a ottenere tutti i valori e avere il filtro dell'applicazione. Entrambi gli scenari:

1/ Se fai SELECT field FROM table WHERE field LIKE "%value%" , MySQL eseguirà la scansione dell'intera tabella e invierà solo i campi contenenti "value".

2/ Se fai SELECT field FROM table e quindi fai filtrare dalla tua applicazione (nel tuo caso PHP) solo le righe con "valore" al suo interno, MySQL eseguirà anche la scansione dell'intera tabella, ma invierà tutti i campi a PHP, che quindi deve fare ulteriore lavoro. Questo è molto più lento del caso n. 1.

Soluzione:si prega di utilizzare il WHERE clausola e utilizzare EXPLAIN per vedere la performance.