Domanda

La creazione di un indice per una colonna che viene sommata è più veloce di nessun indice?

È stato utile?

Soluzione

Siamo spiacenti, non è chiaro cosa stai chiedendo.

Stai chiedendo, accelererebbe una query come

SELECT product, sum(quantity) FROM receipts 
GROUP BY product

se hai aggiunto un indice sulla quantità?

Se questa è la domanda, allora la risposta è no. In generale, gli indici sono utili quando è necessario trovare solo poche righe tra molte; qui hai bisogno di tutte le righe, quindi un indice non aiuta.

C'è un'eccezione oscura (che si applica così raramente la maggior parte degli ottimizzatori DB probabilmente non si preoccupano di implementare questo trucco). Se la tua query sembra essere

SELECT sum(foo) FROM bar

, dove c'è un indice su foo, e bar è una tabella con molte colonne, è possibile leggere l'intero indice, incorrendo in un hit più piccolo di se si legge la tabella sottostante, e ottenere la risposta direttamente dal indice - non dovendo mai toccare il "reale" tavolo a tutti! Questo è un caso abbastanza raro, tuttavia, e vorrai verificare che il tuo ottimizzatore sappia farlo prima di fare troppo affidamento su questo.

Altri suggerimenti

No. Gli indici migliorano le ricerche limitando il numero di controlli richiesti. Una funzione aggregata (count, max, min, sum, avg) deve scorrere tutte le voci in una colonna indipendentemente.

Se vuoi rendere la somma più veloce, puoi pre-materializzare il risultato. Su Oracle, usa Viste materializzate , su MS SQL usa Visualizzazioni indicizzate .

Sulla tua domanda specifica " La creazione di un indice per una colonna che viene sommata è più veloce di nessun indice? " ;, la risposta è No.

La risposta alla tua domanda si trova nella risposta di Spencer:

" Una funzione aggregata (count, max, min, sum, avg) deve scorrere tutte le voci in una colonna che viene sommata indipendentemente. "

Ho appena chiarito il contesto delle colonne nella risposta di Spencer. La sua risposta è comunque corretta.

Se l'indice copre, sarà generalmente più veloce. Quanto più veloce sarà determinato dalla differenza tra il numero di colonne nella tabella rispetto al numero nell'indice. Inoltre, potrebbe essere più veloce se esistono criteri di filtro.

Ho trovato che indicizzare una colonna nel dove (productid qui) aiuta quando si utilizza questa query:

SELEZIONA productid, somma (quantità) DA ricevute DOVE productid = 1 GROUP BY productid

Una delle mie query è passata da 45 secondi a quasi istantanea una volta aggiunto l'indice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top