Oracle
 sql >> Database >  >> RDS >> Oracle

Indici di database B-Tree vs Bitmap

Da wikipedia:B-Trees e indici bitmap . I casi d'uso:

  • I B-Trees sono il tipico tipo di indice utilizzato quando si esegue CREATE INDEX ... in un database:

    1. Sono molto veloci quando selezioni solo un piccolo sottoinsieme dei dati dell'indice (5%-10% massimo in genere)
  • Funzionano meglio quando hai molti valori indicizzati distinti.
  • È possibile combinare diversi indici B-Tree, ma gli approcci più semplici sono spesso più efficienti.
  • Non sono utili quando sono presenti pochi valori distinti per i dati indicizzati o quando si desidera ottenere un sottoinsieme di dati di grandi dimensioni (>10% in genere).
  • Ogni indice B-Tree impone una piccola penalità durante l'inserimento/l'aggiornamento di valori nella tabella indicizzata. Questo può essere un problema se hai molti indici in una tabella molto occupata.

  • Questa caratteristica rende gli indici B-Tree molto utili per velocizzare le ricerche nelle applicazioni OLTP, quando lavori con set di dati molto piccoli alla volta, la maggior parte delle query filtra per ID e desideri buone prestazioni simultanee.

  • Gli indici bitmap sono una variante dell'indice più specializzata:

    1. Codificano i valori indicizzati come bitmap e quindi sono molto efficienti in termini di spazio.
    2. Tendono a funzionare meglio quando sono presenti pochi valori indicizzati distinti
    3. Gli ottimizzatori di database possono combinare più bitmap indicizzati molto facilmente, ciò consente l'esecuzione efficiente di filtri complessi nelle query.
    4. Sono molto inefficienti durante l'inserimento/l'aggiornamento dei valori.


    Gli indici bitmap sono utilizzati principalmente nelle applicazioni di data warehouse, in cui il database è di sola lettura ad eccezione dei processi ETL e di solito è necessario eseguire query complesse su un schema a stella , dove gli indici bitmap possono velocizzare il filtraggio in base alle condizioni nelle tabelle delle dimensioni, che in genere non hanno troppi valori distinti.

In breve:usa gli indici B-Tree (l'indice "predefinito" nella maggior parte dei database) a meno che tu non sia uno sviluppatore di data warehouse e sa trarrai vantaggio da un indice bitmap.