Structured Query Language (SQL) è un linguaggio di programmazione per scopi speciali utilizzato per archiviare, manipolare e recuperare i dati dal database. Ha trovato applicazioni in molti sistemi di database relazionali tra cui MySQL, Postgres, Oracle, SQL Server e altri.
Utilizzando le istruzioni SQL, gli sviluppatori eseguono facilmente varie operazioni di database funzionali come la creazione, l'aggiornamento e l'eliminazione dei dati.
Man mano che i volumi di dati crescono e la tecnologia diventa sempre più complessa, sta diventando sempre più importante ottimizzare adeguatamente i database MySQL per offrire un'esperienza utente finale e ridurre i costi dell'infrastruttura. Gli strumenti di ottimizzazione delle prestazioni di MySQL possono aiutare i professionisti del database a identificare rapidamente i colli di bottiglia, indirizzare operazioni insufficienti attraverso una revisione dei piani di esecuzione delle query ed eliminare qualsiasi gioco di ipotesi.
Con l'ulteriore complessità di volumi di dati in crescita e carichi di lavoro in continua evoluzione, l'ottimizzazione delle prestazioni del database e l'ottimizzazione delle query MySQL sono ora necessarie per massimizzare l'utilizzo delle risorse e le prestazioni del sistema.
Ci sono diversi motivi che rendono l'ottimizzazione di SQL un po' complessa per gli sviluppatori. In primo luogo, richiede una vasta esperienza tecnica per scrivere e comprendere diversi piani di esecuzione. Mentre la scrittura di istruzioni SQL pulite e complete è responsabilità di colui che ne acquisisce una conoscenza approfondita.
Oltre alla sua complessità, l'ottimizzazione richiede molto tempo. Perché quando hai un gran numero di istruzioni SQL da ordinare, porta un po' di incertezza nello scoprire quali istruzioni devi mettere a punto e quale dovresti lasciare. E sebbene ogni affermazione sia diversa, il loro approccio di ottimizzazione varia anche in base alle rispettive funzionalità.
Preparati per l'aggiornamento di Core Web Vitals
Ebook per velocizzare il tuo sito web prima di iniziare a perdere traffico.
Grazie
La tua lista è in arrivo nella tua casella di posta.
In questo tutorial, discuterò come migliorare le prestazioni di MySQL utilizzando alcuni pratici suggerimenti per l'ottimizzazione delle prestazioni. Quindi, vediamoli in dettaglio di seguito:
I vantaggi dell'ottimizzazione delle prestazioni di MySQL
Il principale vantaggio dell'identificazione del fattore di guida delle prestazioni per il database consente di evitare l'overprovisioning e di ridurre i costi dimensionando correttamente i server. Fornisce inoltre informazioni dettagliate sul fatto che lo spostamento dell'archiviazione dei dati o l'aggiunta di capacità del server aumenterà o meno le prestazioni e, in tal caso, quanto sarà.
Il database di ottimizzazione per l'ottimizzazione delle prestazioni delle query MySQL non presenta pallide sfide. Tuttavia, una volta ottimizzato correttamente, il database fornisce risultati di prestazioni utili con grandi funzionalità. Non solo riduce il carico di attività indesiderate, ma ottimizza anche il database MySQL per un recupero più rapido dei dati.
Potrebbe piacerti anche: Suggerimenti per le prestazioni PHP per ottimizzare i tuoi siti web
Ottimizza le query con le linee guida per l'ottimizzazione delle query MySQL
Segui queste best practice per l'ottimizzazione delle prestazioni di MySQL e l'ottimizzazione della velocità del database.
Prima di tutto, assicurati l'indicizzazione di tutti i predicati nelle clausole WHERE, JOIN, ORDER BY e GROUP BY. WebSphere Commerce enfatizza fortemente l'indicizzazione dei predicati per aumentare le prestazioni SQL. Perché un'indicizzazione impropria delle query SQL può causare scansioni delle tabelle, che alla fine portano a problemi di blocco e altri problemi.
Pertanto, consiglio vivamente di indicizzare tutte le colonne dei predicati in modo che il database possa sperimentare l'ottimizzazione delle query MySQL.
Potrebbe piacerti anche: Guida all'ottimizzazione delle prestazioni di Laravel
Evita di usare funzioni nei predicati
Il database non utilizza un indice se ha una funzione predefinita nella colonna.
Ad esempio:
SELECT * FROM TABLE1 WHERE UPPER(COL1)='ABC'Copy
A causa della funzione UPPER(), il database non utilizza l'indice su COL1. Se non c'è modo di evitare quella funzione in SQL, dovrai creare un nuovo indice basato sulla funzione o generare colonne personalizzate nel database per migliorare le prestazioni.
Evita di usare un carattere jolly (%) all'inizio di un predicato
Il predicato LIKE '%abc'
provoca una scansione completa della tabella. Ad esempio:
SELECT * FROM TABLE1 WHERE COL1 LIKE '%ABC'Copy
Nella maggior parte dei casi, questo utilizzo di caratteri jolly comporta notevoli limitazioni alle prestazioni.
Evita le colonne non necessarie nella clausola SELECT
Invece di usare 'SELECT *', specifica sempre le colonne nella clausola SELECT per migliorare le prestazioni di MySQL. Poiché le colonne non necessarie causano un carico aggiuntivo sul database, rallentandone le prestazioni e l'intero processo sistematico.
Utilizza inner join, invece di outer join, se possibile
Utilizzare il join esterno solo quando è necessario. Usarlo inutilmente non solo limita le prestazioni del database, ma limita anche le opzioni di ottimizzazione delle query MySQL, con conseguente rallentamento dell'esecuzione delle istruzioni SQL.
Usa DISTINCT e UNION solo se necessario
L'utilizzo degli operatori UNION e DISTINCT senza alcuno scopo principale provoca l'ordinamento indesiderato e il rallentamento dell'esecuzione di SQL. Invece di UNION, l'utilizzo di UNION ALL aumenta l'efficienza del processo e migliora le prestazioni di MySQL in modo più preciso.
La clausola ORDER BY è obbligatoria in SQL se prevedi di ottenere un risultato ordinato
La parola chiave ORDER BY ordina il set di risultati in colonne di istruzioni predefinite. Sebbene l'istruzione offra vantaggi agli amministratori del database per ottenere i dati ordinati, produce anche un leggero impatto sulle prestazioni nell'esecuzione di SQL. Perché la query deve prima ordinare i dati per produrre il set di risultati finale, causando un'operazione un po' complessa nell'esecuzione SQL.
Potrebbe piacerti anche: Come unire due tabelle in MySQL
Non utilizzare MySQL come coda
Le code possono influenzare le prestazioni del tuo database fin dal core e potrebbero entrare nei database delle tue app a tua insaputa. Ad esempio, se stai impostando uno stato per un particolare elemento in modo che un "processo pertinente" possa accedervi, stai creando involontariamente una coda. Quello che fa è accumulare tempo di caricamento aggiuntivo per accedere alla risorsa senza alcun motivo importante.
Le code causano problemi per due motivi principali. Serializzano il carico di lavoro, impedendo il completamento delle attività in parallelo e spesso danno luogo a una tabella che contiene il lavoro in corso, nonché i dati storici dei lavori già completati. Non solo aggiunge latenza all'applicazione, ma aggiunge anche un ostacolo all'ottimizzazione delle prestazioni di MySQL.
Potrebbe piacerti anche: Come usare Redis per fare la coda
Capire le quattro risorse fondamentali
Sono necessarie quattro risorse fondamentali per creare funzioni di database. CPU, disco, memoria e rete. Se qualcuno di questi non funziona correttamente, alla fine influirà sul server del database e si tradurrà in scarse prestazioni.
Per comprendere correttamente le risorse fondamentali, è necessario concentrarsi su due aree particolari, ovvero la scelta dell'hardware giusto e la risoluzione dei problemi con esso.
Assicurati sempre di utilizzare componenti prestazionali completi quando scegli l'hardware per il database MySQL. Non solo optare per il migliore tra lo stack, ma anche assicurarsi che ci dovrebbe essere il giusto equilibrio tra di loro. Abbiamo spesso visto che le organizzazioni tendono a selezionare server con CPU veloci e dischi di grandi dimensioni, ma vengono scambiate per memoria affamata che alla fine riduce le prestazioni.
In alcuni scenari, l'aggiunta di memoria diventa molto importante per migliorare le prestazioni quando si tratta dell'entità. Sembra un po' controintuitivo, ma nella maggior parte dei casi l'utilizzo eccessivo dei dischi influisce direttamente sulle prestazioni del database. Poiché la carenza di memoria sufficiente per contenere i dati del server si rivela costosa nel far deragliare le prestazioni del database.
Quando si tratta di risoluzione dei problemi, tieni sempre sotto controllo le prestazioni di tutte e quattro le risorse fondamentali. Convalidare qualitativamente che stanno funzionando secondo il miglioramento delle esigenze nelle norme. Prendere in considerazione regolarmente questo audit risolverà rapidamente i principali problemi che si verificano.
Query di impaginazione
Le applicazioni che impaginano tendono a far cadere il server. Nel mostrarti una pagina di risultati, con un link per andare alla pagina successiva, queste applicazioni in genere raggruppano e ordinano in modi che non possono usare gli indici e impiegano una funzione LIMIT e offset che fa sì che il server faccia molti generare lavoro, quindi scartare le righe.
Puoi trovare le ottimizzazioni all'interno dell'interfaccia utente stessa. Invece di mostrare il numero esatto di pagine nei risultati e i collegamenti a una singola pagina, puoi semplicemente mostrare un collegamento alla pagina successiva. Puoi anche impedire alle persone di accedere a pagine non pertinenti.
Sul lato della query, invece di utilizzare LIMIT con offset, puoi selezionare un'altra riga di quella necessaria e quando l'utente fa clic sul collegamento "pagina successiva", puoi designare quella riga finale come punto di partenza per il prossimo set di risultati . Ad esempio, se l'utente ha visualizzato una pagina con le righe da 101 a 120, dovrai selezionare anche la riga 121; per visualizzare la pagina successiva, dovresti interrogare il server per righe maggiori o uguali a 121, limite 21.
Ottimizzazione delle sottoquery MySQL
Il consiglio più importante che posso darti sulle sottoquery è che devi preferire un join ove possibile, almeno nelle versioni correnti di MySQL.
Le sottoquery sono oggetto di un intenso lavoro da parte del team di ottimizzazione e le prossime versioni di MySQL potrebbero avere più ottimizzazioni delle sottoquery. Controlla quali ottimizzazioni finiranno nel codice rilasciato e quanta differenza faranno. Il mio punto qui è che "preferire un join" non è un consiglio a prova di futuro. Il server diventa sempre più intelligente e i casi in cui devi dirgli come fare qualcosa invece di quali risultati restituire stanno diventando sempre meno.
Cache query MySQL
Uno degli aspetti più importanti della misurazione delle prestazioni è la memorizzazione nella cache del contenuto. MySQL fornisce la memorizzazione nella cache delle query del database che memorizza nella cache il testo dell'istruzione SELECT e il risultato recuperato. Quindi, ogni volta che crei un database duplicato, chiami la cache delle query MySQL, ti risponderà e mostrerà il risultato dalla cache e nessuna chiamata verrà analizzata ripetutamente. In questo modo, puoi massimizzare il processo di ottimizzazione della cache MySQL.
Per configurare la cache delle query MySQL, devi aggiungere alcune impostazioni a MySQL. Prima di tutto, devi verificare se la cache delle query è disponibile o meno con il seguente comando:
mysql> SHOW VARIABLES LIKE 'have_query_cache';
Questo mostrerà il risultato, SÌ. Ciò significa che la cache MySQL funziona correttamente.
+------------------+-------+ | Variable_name | Value | +------------------+-------+ | have_query_cache | YES | +------------------+-------+
Ora puoi impostare la dimensione e il tipo della cache della query MySQL. Ricorda che la dimensione minima predefinita è 40 KB. La dimensione massima può essere 32 MB. Puoi impostare MySQL query_cache_size usando il seguente comando:
mysql> SET GLOBAL query_cache_size = 40000;
Il tipo di cache delle query può determinare il comportamento di tutte le connessioni. Puoi anche disabilitare la cache delle query per query come:
mysql> SET SESSION query_cache_type = OFF;
Puoi anche impostare valori come 0,1 e 2 per impostare lo stato della connessione.
Utilizza Memcached per la memorizzazione nella cache di MySQL
Memcached è un sistema di memorizzazione nella cache di memoria distribuito. Accelera i siti Web con database dinamici di grandi dimensioni archiviando l'oggetto del database nella memoria dinamica per ridurre la pressione su un server, ogni volta che un'origine dati esterna richiede una lettura. Un livello Memcached riduce il numero di volte in cui il database effettua una richiesta.
Memcached memorizza i valori (v) con la chiave (k) e recupera i valori (v) con la chiave (k) senza nemmeno analizzare le query del database ed evita tutte queste seccature.
Per saperne di più su Memcached, puoi leggere la guida su come configurare Memcached in php.
Concludo!
Questo articolo fornisce in dettaglio il resoconto delle migliori pratiche per l'ottimizzazione del database e utili suggerimenti per l'ottimizzazione delle prestazioni di MySQL che ogni sviluppatore deve conoscere. È una guida completa per quegli sviluppatori di back-end, che sono incerti sulle scarse prestazioni del database e hanno bisogno di alcune tecniche utili per ottimizzare il database MySQL dal core.
Se vuoi aggiungere i tuoi pensieri sull'argomento o vuoi porre alcune domande al riguardo, sentiti libero di scrivere i tuoi commenti nella sezione commenti.