Panoramica Cos'è un singolo indice e cos'è un indice composito? Quando creare un nuovo indice composito e a cosa dovrei prestare attenzione nell'indice composito? Questo articolo è principalmente un riassunto di alcune discussioni su Internet.
Uno. concetto
Un singolo indice è una situazione in cui l'indice è elencato in una sola colonna, cioè l'enunciato di creazione di un nuovo indice è implementato su una sola colonna.
Gli utenti possono creare indici su più colonne, chiamati indici compositi (indici combinati). Gli indici compositi sono creati esattamente allo stesso modo degli indici singoli. Tuttavia, gli indici compositi richiedono meno overhead durante le operazioni del database e possono sostituire più indici singoli. Quando il numero di righe in una tabella è molto maggiore del numero di chiavi, questo metodo può accelerare significativamente la velocità di query della tabella.
Ci sono due concetti contemporaneamente: indici stretti e indici ampi, gli indici ristretti si riferiscono a indici con 1-2 colonne e generalmente si riferiscono a un unico indice salvo diversa specificazione. Un indice ampio è un indice con più di 2 colonne.
Un principio importante della progettazione degli indici è utilizzare indici ristretti invece di indici ampi, perché gli indici stretti tendono a essere più efficaci degli indici combinati. Avere indici più ristretti darà all'ottimizzatore più scelta, il che spesso aiuta a migliorare le prestazioni.
Due. Utilizzo
Crea un indice Crea indice IDX1 su Tabella1(col1,col2,col3) Informarsi selezionare * dalla tabella 1 dove col1 = A e col2 = B e col3 = C
In questo momento, l'ottimizzatore di query non scansiona la tabella, ma prende direttamente i dati dall'indice, perché ci sono questi dati nell'indice, chiamati overlay query, e la velocità della query è molto elevata.
Tre. Note:
1. Quando utilizzare un indice composto Nella condizione where, il campo è indicizzato e, se si usano più campi, si utilizza un indice composito. In generale, non costruire indici nel campo select (se vuoi consultare col1, col2, col3 da mytable, non serve l'indice sopra). L'indicizzazione basata su dove le condizioni sono un principio estremamente importante. Fai attenzione a non usare troppi indici, altrimenti avrà un grande impatto sull'efficienza degli aggiornamenti delle tabelle, perché devi dedicare molto tempo a creare indici quando si operano le tabelle.
2. Per gli indici compositi, quando si utilizza la query, è meglio seguire l'ordine di ricerca degli indici, che è il più efficiente. Per esempio: IDX1:crea indice IDX1 su tabella1(col2,col3,col5) select * dalla tabella 1 dove col2=A e col3=B e col5=D
Se è "seleziona * dalla tabella1 dove col3=B e col2=A e col5=D" Oppure "seleziona * dalla tabella 1 dove col3=B" non userà l'indice, oppure l'effetto non è percepibile
3. Un indice composito sostituirà un singolo indice? Molte persone pensano che aggiungere qualsiasi campo all'indice clusterizzato possa migliorare la velocità delle query, ma alcune persone sono confuse: se i campi dell'indice cluster composto vengono interrogati separatamente, la velocità della query rallenterà? Con questa domanda, diamo un'occhiata alla seguente velocità di query (il set di risultati è di 250.000 dati) :( colonna data fariqi è la prima nella colonna iniziale dell'indice di aggregazione composita, mentre il nome utente neibuyonghu è secondo)
IDX1:create index idx1 on Tgongwen(fariqi,neibuyonghu)
(1) selezionare gid, fariqi, neibuyonghu, titolo da Tgongwen dove Fariqi>'2004-5-5'
Velocità di interrogazione: 2513 ms
(2) selezionare gid, fariqi, neibuyonghu, titolo da Tgongwen dove Fariqi>'2004-5-5' e Neibuyonghu='Ufficio'
Velocità di interrogazione: 2516 ms
(3) selezionare gid, fariqi, neibuyonghu, titolo da Tgongwen dove neibuyonghu='ufficio'
Velocità di interrogazione: 60280 millisecondi
Dagli esperimenti sopra descritti, possiamo vedere che se come condizione di query viene usata solo la colonna iniziale dell'indice clusterizzato, la velocità di query di tutte le colonne con l'indice cluster composito è quasi la stessa, addirittura leggermente più veloce rispetto all'uso di tutte le colonne dell'indice composito (quando il numero di set di risultati delle query è lo stesso). Se solo le colonne non iniziali dell'indice aggregato composto vengono usate come condizioni di interrogazione, questo indice non farà nulla. Naturalmente, la velocità di query delle istruzioni 1 e 2 è la stessa perché il numero di voci nella query è lo stesso; se si usano tutte le colonne dell'indice composito e i risultati della query sono pochi, questo formerà un "sovrascritto dell'indice", così da ottimizzare le prestazioni. Inoltre, tieni presente che, indipendentemente dal fatto che tu usi o meno frequentemente altre colonne nell'indice aggregato, la colonna iniziale deve essere quella più usata.
[Rif: Schema dell'Ottimizzazione delle Query e dell'Algoritmo di Paginazione http://blog.csdn.net/chiefsailor/archive/2007/05/28/1628339.aspx]
4. Devo creare un singolo indice e un indice composito sulla stessa colonna contemporaneamente? Esperimento: Sysbase 5.0 tabella 1 campi: col1, col2, col3
Passaggi del test: (1) Creare l'indice idx1 su col1 Esegui select * dalla tabella1 dove col1=A usa idx1 Esegui seleziona * dalla tabella 1 dove col1=A e col2=B usano anch'essi idx1
(2) Elimina l'indice idx1, e poi crea un idx2 su (col1,col2) indice composito Entrambe le query usano idx2
(3) Se esistono entrambi gli indici idx1 e idx2 Non è dove col1='A' usa idx1; dove col1=A e col2=B usa idx2. Il suo ottimizzatore di query utilizza uno degli indici precedentemente comunemente utilizzati. Usa idx1 o idx2.
Si può vedere che (1) Per una tabella, se esiste un indice composto su (col1, col2), non è necessario creare un unico indice su col1 contemporaneamente. (2) Se le condizioni di query lo richiedono, si può aggiungere l'indice composto su (col1, col2) quando c'è già un unico indice su col1, il che può migliorare l'efficienza fino a un certo punto. (3) Non ci sono molti vantaggi nel stabilire un indice composito con più campi (contenenti 5 o 6 campi) contemporaneamente; relativamente parlando, stabilire un indice con più campi stretti (contenenti solo uno, o al massimo 2 campi) può ottenere maggiore efficienza e flessibilità.
5. Devo coprire la domanda? In generale è meglio non adottare una strategia che enfatizzi la copertura completa delle richieste. Se tutte le colonne della clausola Select sono sovrascritte da un indice non clusterizzato, l'ottimizzatore lo riconoscerà e fornirà buone prestazioni. Tuttavia, questo spesso porta a un indice eccessivamente ampio e a un'eccessiva dipendenza dalla probabilità che l'ottimizzatore utilizzi la policy. Tipicamente, gli indici ristretti sono utilizzati per un numero maggiore di query, il che offre migliori prestazioni per query grandi. |