Domanda

Stavo leggendo del refactoring di una grande query SQL lenta su qui e l'attuale più alto la risposta è di Mitch Wheat, che vuole assicurarsi che la query utilizzi gli indici per le selezioni principali e menzioni:

  

La prima cosa che vorrei fare è controllare per assicurarsi che ci sia un lavoro di manutenzione dell'indice attivo che viene eseguito periodicamente. In caso contrario, ricostruisci tutti gli indici esistenti o, se non è possibile, almeno aggiorna le statistiche.

Sono solo un DBA amatoriale e ho creato alcuni programmi come freelance che sono fondamentalmente client desktop Java e occasionalmente un back-end MySQL. Quando installo il sistema, so di creare un indice sulle colonne che verranno interrogate da, c'è un CaseID varchar e un CustName varchar.

Tuttavia, ho impostato questo sistema mesi fa e ho lasciato il client operativo, e credo che gli indici dovrebbero crescere man mano che i dati vengono immessi e credo che tutto funzioni ancora bene. Sono preoccupato, tuttavia, che gli indici debbano essere ricostruiti periodicamente, perché oggi ho letto che dovrebbe esserci un "lavoro di manutenzione attiva". L'unico lavoro di manutenzione che ho impostato è stato un backup notturno.

Volevo chiedere alla community la manutenzione regolare che un database potrebbe richiedere. È necessario ricostruire gli indici? Posso fidarmi del back-end di MySQL per continuare finché non si scherza e i dati rimangono al di sotto di pochi gigabyte?

È stato utile?

Soluzione

Non è necessario 'ricostruire' un indice. Sono sempre tenuti aggiornati. Forse si riferiva alla ricostruzione del tavolo. A seconda dei modelli di utilizzo e dello schema, puoi ottenere pagine frammentate in InnoDB, e penso anche in MyISAM. La ricostruzione della tabella può migliorare le prestazioni eliminando la frammentazione dei dati sul disco. Non utilizzo le tabelle MyISAM regolarmente, ma credo che si consiglia di eseguire 'OPTIMIZE TABLE' con determinati schemi di utilizzo. Consulta i documenti MySQL su OPTIMIZE TABLE per alcune informazioni utili su MyISAM e InnoDB.

Non ho familiarità con le complessità di MyISAM, ma con InnoDB è vero che le statistiche possono non essere aggiornate. Il database mantiene statistiche stimate su come i tuoi dati sono distribuiti per un dato indice ed è possibile che quelli non siano aggiornati, ma MySQL / InnoDB ha alcune funzionalità integrate per cercare di mantenere aggiornate le statistiche. Di solito non devi preoccuparti.

Quindi, se si utilizza InnoDB, la risposta è no, in genere non è necessario fare attivamente nulla per mantenere un buon rendimento degli indici. Non sono sicuro con MyISAM, penso che sia più comune avere bisogno di ottimizzare quelle tabelle regolarmente.

Altri suggerimenti

Di solito è una buona idea impostare un cronjob per ottimizzare gli indici e verificare la presenza di errori.

Vedi mysqlcheck . Un tipico lavoro cron assomiglia a mysqlcheck -Aaos , che controlla la presenza di errori in tutte le tabelle in tutti i database, ottimizza gli indici e produce solo errori.

La risposta che hai collegato a proposito di "manutenzione ordinaria" era nel contesto specifico di una tabella temporanea che viene troncata e ripopolata regolarmente. Non è necessario eseguire questa operazione nella maggior parte delle installazioni di database MySQL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top