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

Scansione completa della tabella costosa su selezionare tutto senza condizioni

Fare riferimento al collegamento sottostante per maggiori dettagli

https://dev.mysql.com/doc /refman/8.0/en/table-scan-evitance.html

la causa della scansione completa della tabella è sotto

  • La tabella è così piccola che è più veloce eseguire una scansione della tabella piuttosto che preoccuparsi di una ricerca di chiavi. Questo è comune per le tabelle con meno di 10 righe e una lunghezza di riga corta.

  • Non ci sono restrizioni utilizzabili nella clausola ON o WHERE per le colonne indicizzate.

  • Stai confrontando colonne indicizzate con valori costanti e MySQL ha calcolato (in base all'albero dell'indice) che le costanti coprono una parte troppo grande della tabella e che una scansione della tabella sarebbe più veloce

  • Stai usando una chiave con cardinalità bassa (molte righe corrispondono al valore della chiave) attraverso un'altra colonna. In questo caso, MySQL presuppone che utilizzando la chiave probabilmente effettuerà molte ricerche di chiavi e che una scansione della tabella sarebbe più veloce.

per evitare la scansione completa della tabella, utilizzare di seguito:

  • Usa ANALYZE TABLE tbl_name per aggiornare le distribuzioni delle chiavi per la tabella scansionata.

  • Usa FORCE INDEX per la tabella scansionata per dire a MySQL che le scansioni delle tabelle sono molto costose rispetto all'utilizzo dell'indice specificato:

    per esempio. SELECT * FROM t1, t2 FORCE INDEX (index_for_column)WHERE t1.col_name=t2.col_name;