Indice vs. partizione


20

Perché non è possibile ottenere miglioramenti delle prestazioni solo con gli indici, in modo che siano necessarie altre tecniche come il partizionamento delle tabelle? La domanda riguarda solo le prestazioni, ovviamente diverse partizioni possono essere inserite in diversi tablespace, il che ha altri effetti che non possono essere raggiunti con gli indici.

O in altre parole, solo per quanto riguarda le prestazioni: è possibile ottenere gli stessi miglioramenti delle prestazioni con gli indici come con il partizionamento delle tabelle?


2
Invece di pensare all'indicizzazione e al partizionamento come una o entrambe le soluzioni per il miglioramento delle prestazioni, dovresti considerare entrambi come strumenti che possono essere utilizzati separatamente o insieme per ottenere miglioramenti delle prestazioni nel tuo database.
ScottCher,

Risposte:


18

No, il partizionamento consente ad alcune scansioni di tabelle di essere limitate a una particolare partizione. Gli indici tendono ad essere inutili se restituirai più del 2-4 percento dei dati della tabella. Se i criteri di selezione consentono di localizzare la query in una partizione particolare, non sarà necessario scansionare le altre partizioni.

Potrebbe essere possibile che l'ottimizzatore scelga di utilizzare la scansione delle tabelle per alcune partizioni e gli indici per altre. Non ho visto alcun piano esplicativo che indichi che sta accadendo.

Se si dispone di molti dati storici, è possibile creare query per i dati correnti per limitare le partizioni considerate a quelli che contengono dati correnti.


3
Io stai creando partizioni. Assicurati di scegliere il dispositivo di archiviazione giusto per ogni partizione. Metti la partizione dati effettiva su un disco ad alta velocità e l'altro vecchio tipo.
Nico,

7

Per rispondere direttamente alla tua ultima domanda: no, non penso che siano equivalenti. Pensa a una tabella molto grande (decine di GB) che dovrà essere cercata per i dati di un giorno. Usando le partizioni giornaliere eseguirai la scansione solo dei dati di quel giorno, senza alcuna penalità di spazio, mentre un indice è una struttura separata che potrebbe non contenere abbastanza informazioni (e occupa anche spazio, il che è un problema quando si parla di grandi database) o potrebbe non esserlo abbastanza selettivo.

Comunque, gli indici e le partizioni non sono in competizione per gli stessi vantaggi nell'uso e nelle prestazioni. Dovresti trovare il saldo nel tuo database.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.