Giusto utilizzo degli indici su database

martedì 01 settembre 2009 - 21.00

ravalon Profilo | Expert

Salve a tutti, mi rivoglo a questa bellissima community per un domanda riguardo l'utilizzo corretto degli indici

In un mio gestionale do la possibilità di fare ricerche tra i dati in base a qualsiasi campo, sia singolo che in doppio criterio (confronto di 2 campi insieme in base a criteri specificati dall'utente)...

Contemporaneamente ci sono dei campi sui quali faccio sempre dei filtri (ad esempio sul settore di lavoro in base al login effettuato)...

Io ho creato degli indici per tutti i campi per i quali è possibile fare ricerche (o quasi tutti), ma cosi mi viene in mente che forse siano un po troppi....

inoltre ho letto (l'ho scoperto da poco) che le query su più campi se non hanno degli indici multipli servono a ben poco....

La mia domanda è quindi composta da più "sottodomande"

Come si applicano degli indici in maniera corretta ?

Nel caso fornirò un esempio di una tabella se fosse necessario a valutare meglio la questione...

tonyexpo Profilo | Senior Member


ciao

in attesa che qualche mvp/itpro di sql ti risponda meglio di me ti posso dire un paio di parole io:


mettere gli indici a tutte le colonne o quasi è una pessima idea
mettere un indice a più colonne per ogni combinazione di ricerca è un'idea ancora peggiore

oltre la chiave che identifica in modo univoco un rigo di tabella (solitamente un campo ma anche più) gli indici sono utili per migliorare i tempi di ricerca, ovviamente aumentando i tempi di inserimento dati visto che ad ogni commit sul db questi vengono aggiornati (in base a regole che trascureremo...)

comunque, in db piccoli (pochi mb) le differenze sn minime
su db di milioni di righi gli indici sono importantissimi e anche complessi da architetturare.


nel tuo caso mi viene da dirti: metti gli indici solo sulle colonne spesso presenti nelle ricerche, e lascia fare al db il resto

ciao


Antonio Esposito
MCTS .NET 3.5 WCF
MCTS .NET 3.5 Windows Forms
MCTS .NET 2.0 Distributed applications
MCP

ravalon Profilo | Expert

Ti ringrazio molto per il tuo intervento....vorrei però un'indicazione su come creare gli indici allora...

tonyexpo Profilo | Senior Member


in che senso?
Antonio Esposito
MCTS .NET 3.5 WCF
MCTS .NET 3.5 Windows Forms
MCTS .NET 2.0 Distributed applications
MCP

ravalon Profilo | Expert

Se metterne tanti non è corretto e metterne di composti da più colonne non va bene, vorrei sapere, in base ai tipi di ricerche che ho necessità di fare e che ho spiegato, dove mi conviene metterli....

....forse è utile che posti una tabella e faccia un esempio vero ?

tonyexpo Profilo | Senior Member


ripeto perchè potrei essermi spiegato male:

se hai una tabella da 10 colonne, non va bene mettere 10 indici, così come non va bene mettere 90 indici sulle combinazioni di tutti i campi di colonne......


se posti un esempio della tua tabella posso darti un consiglio più diretto ;)
Antonio Esposito
MCTS .NET 3.5 WCF
MCTS .NET 3.5 Windows Forms
MCTS .NET 2.0 Distributed applications
MCP

ravalon Profilo | Expert

certo, ne posto una da esempio....

Tabella PRODOTTI

id (PK)
Prodotto (char (120))
CodProdotto (char (20))
CodMagazzino (char (20))
Formato (integer)
CodFornitore (char (20))
IdCategoria (integer)
QtMinima (integer)
QtMinimaOrdineAperto (integer)
CodSettore (char (6))
IsScontoMerce (boolean)

Ora.....il filtro su CodSettore lo applico ad ogni query,perchè mi indirizza l'utente verso i soli dati del suo settore....qui dovrei mettere un indice ?
Spesso faccio query su altri campi incrociati ma niente di cosi frequente come il filtro su CodSettore
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5