Quote Originariamente inviata da marziomorandi Visualizza il messaggio
Buongiorno,
ho una quesry di SQL Server su una tabella con circa 180.000 record,
codice:
Select * from MKTPart Where KeyCorso = 'AB1234566' and Data conferma <> '' order by KeyCorso
La prima volta che la eseguo dopo che sql è stato avviato impiega circa 10 minuti.
Dopo la prima volta è immediata e continua così fino al prossimo riavvio di SQL.

Grazie
Saluti

Marzio
Se la prima volta ci mette 10 minuti è perchè deve fare una full scan, quindi non è indicizzata...
Intanto, per leggibilità e per evitare errori, racchiuderei i campi e le tabelle nei classici apici, quindi la query diventa

codice:
SELECT * FROM `MKTPart` WHERE `KeyCorso` = 'AB1234566' AND `Data conferma` <> '' ORDER BY `KeyCorso`
In seconda battuta, modifica il nome del campo "Data conferma" e usa qualcosa tipo "Data_Conferma" (niente spazi nei nomi, ti eviti un sacco di problemi)

Ultimo....quanto è importante questa query? Nel senso...la usi spesso per ogni utente/ricerca? Immagino di sì, quindi:

L'ideale, a occhio, è creare una chiave sui due campi "KeyCorso" e "Data_Conferma" (una chiave con due campi, non una chiave per ogni campo).
Questo però ha senso SE il formato della Data_Conferma è un TimeStamp oppure un int(10) e ci salvi dentro un TimeStamp oppure la rappresentazione unixhepoc della data.
A questo punto, essendo fondamentalmente un numero, l'indice lavora molto meglio che una stringa. Fatto questo, cambi la query da <> '' a > 0
Ancora meglio sarebbe valorizzare sempre la Data_Conferma, impostando che può essere null e vale 0 come predefinito, così non dovresti avere problemi con le query di inserimento