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

La selezione di MySQL sembra molto lenta ma non riesci a pensare a come migliorare?

Penso che ci siano alcuni problemi con la query e la definizione della tabella stessa.

  • Table.name è una colonna di caratteri 4K
  • La query sta ordinando in base a quella colonna

Stai ordinando in base a una colonna in cui stai archiviando le stringhe. Per ordinare per stringhe, è necessario eseguire confronti di stringhe. Il confronto delle stringhe tende a essere un'operazione lenta e, date le dimensioni della colonna che stai utilizzando, è molto probabile che causi un notevole calo delle prestazioni.

Non abbiamo un'indicazione del contenuto del tuo name colonna e sembra difficile pensare a un nome reale che richieda quello molti caratteri.

Se questa stringa contiene diversi dati concettualmente diversi, forse la colonna dovrebbe essere suddivisa in più colonne separate, se possibile, e quindi normalizzata in modo appropriato.

Se puoi suddividere il contenuto di quella colonna in più colonne più piccole e quindi utilizzarle, i confronti di stringhe, sebbene ancora costosi, sarebbero "più veloci" semplicemente perché le stringhe confrontate saranno significativamente più brevi di quelle che sono ora.

Un'altra cosa da considerare è se puoi ottimizzare la ricerca evitando confronti di stringhe del tutto o evitando query che causeranno una scansione completa della tabella nonostante tu abbia definito gli indici.

Per questo dovresti guardare usando explain con la tua query, in modo da poter comprendere meglio le Piano di esecuzione della query

Citando i documenti (corsivo mio):

Modifica 1

Hai chiarito che il tuo name la colonna è in realtà per le note dell'utente. In questo caso, penso che dovresti considerare quanto segue (in aggiunta a quanto già accennato):

  1. Rinomina la colonna con qualcosa che sia correlato al suo contenuto effettivo
  2. Rimuovi l'indice dalla colonna
  3. Non non usa quella colonna per la ricerca, l'ordinamento o qualsiasi altra operazione diversa dalla semplice selezione per visualizzarla (sarebbe molto raro se doveva essere usato per qualcos'altro, IMHO.)
  4. Facoltativamente, valuta la possibilità di modificare la colonna in un text digita e non dovrai preoccuparti più di tanto dei saggi degli utenti essere troncato senza preavviso (a meno che la GUI non abbia imposto all'utente lo stesso limite di lunghezza di input)