Italia: +39 02 249 59 120
USA/Canada Subscription Renewals: +1-866-221-0634
EMEA: +353 1 8031050
MySQL Partitioning consente a sviluppatori e DBA di migliorare le prestazioni e semplificare la gestione dei database di grandi dimensioni. MySQL supporta il partizionamento orizzontale, consentendo alle righe di un database di essere divise in set di dati più piccoli, distribuibili su più directory e dischi.
Il partizionamento aumenta le prestazioni delle query, poiché si accede ai set di dati più piccoli solo per operazioni specifiche, anziché accedere ad una singola grande tabella. È inoltre possibile suddividere una tabella partizionata su unità fisiche differenti, riducendo quindi le contese per l’I/O fisico quando si accede a più partizioni contemporaneamente.
Il partizionamento semplifica la gestione dei dati. Per esempio, un DBA può escludere specifiche partizioni in una tabella, mentre le rimanenti partizioni rimangono intatte (anziché dover ricorrere a un'operazione di cancellazione di massa che produca la frammentazione dell'intera tabella).
I diversi metodi di partizionamento consentono ai DBA di controllare in modo preciso il modo in cui i dati sono suddivisi:
Ogni partizione contiene righe di mapping verso uno specifico gruppo (range) di valori. Questo tipo di partizionamento è utile quando si eseguono spesso delle query che dipendono direttamente dalla colonna utilizzata per il partizionamento della tabella, oppure per cancellare rapidamente vecchi dati attraverso la semplice eliminazione di una tabella.
Il partizionamento per liste è simile al partizionamento per range. La principale differenza è che questo partizionamento consente ai dati di essere segmentati in base ad una lista di valori definiti dal DBA, anziché un gruppo di range di valori contigui.
Il partizionamento per colonne consente di usare più colonne nelle chiavi di partizionamento. Le colonne sono usate per inserire le righe nelle partizioni e per determinare quali partizioni siano controllate per determinare la corrispondenza delle righe nelle operazioni di partition pruning. Il partizionamento per colonne è un’estensione del partizionamento per range e per lista.
Il partizionamento hash è usato principalmente per garantire la distribuzione bilanciata dei dati tra un numero predefinito di partizioni. Con il partizionamento per range o per lista, è necessario specificare esplicitamente all’interno di quale partizione debba essere conservato un determinato valore di colonna. Con il partizionamento hash, MySQL gestisce questo aspetto; l'utente deve specificare solo un valore di colonna o un'espressione basata su un valore di colonna per l'hashing, così come il numero di partizioni in cui dividere la tabella partizionata.
Una variante del partizionamento hash è il Linear Hash, che usa un algoritmo più complesso per partizionare i dati e rendere molto più veloce l’aggiunta, l’eliminazione, l’unione o la suddivisione delle partizioni in presenza di tabelle multi-terabyte.
Il partizionamento per chiave è simile al partizionamento hash, poiché MySQL garantisce una distribuzione bilanciata dei dati attraverso una chiave hash generata dal sistema, anziché le espressioni definite dall’utente usate dal partizionamento hash. Il partizionamento per chiave consente di usare una vasta gamma di tipi di dati di colonna per il partizionamento.
Il sub-partizionamento consente di dividere ulteriormente ciascuna partizione in una tabella partizionata ed è progettato per le tabelle particolarmente grandi, dove i dati e gli indici possono essere distribuiti su più server e dischi.
Utilizzando in una query le clausole "WHERE" o "ON" corrette, il MySQL Optimizer può accedere solo alle partizioni contenenti un valore corrispondente. L’esecuzione della query può quindi essere molto più veloce rispetto alla stessa query eseguita su una tabella non partizionata.
