In Scaling Up Your Data Warehouse with SQL Server 2008 R2, l'autore consiglia di utilizzare una chiave data intera nel formato di AAAAMMGG come indice cluster nelle tabelle dei fatti per ottimizzare la velocità della query.TSQL DateTime to DateKey Int
Qual è il modo migliore per convertire il campo della data chiave nella chiave della data? Sento il seguente avrebbe funzionato, ma è un po 'sciatto:
select Replace(CONVERT(varchar,GETDATE(),102),'.','')
Chiaramente, non sto usando getdate, ma piuttosto una colonna di data nella tabella che verrà utilizzato nei miei aggregazioni.
Per prima cosa, come suggeriresti di realizzare questa conversione? La mia idea è accettabile?
In secondo luogo, qualcuno ha avuto molto successo utilizzando la chiave di data come indice cluster?
conversione getdate() direttamente a INT con IS 112 dà 41008 perché è il numero di giorni dalla data 0. È possibile convalidare confrontando tale risultato con il risultato di DATEDIFF tra 0 e GETDATE(). 'SELEZIONA CONVERT (INT, GETDATE(), 112), DATEDIFF (giorno, 0, GETDATE())' –
@AdamPorad +1 Cheers per chiarire che – HeavenCore
Penso che il test sia difettoso. La differenza nel tempo trascorso è il risultato della visualizzazione della lunga lista di valori sullo schermo.Inoltre, si sta utilizzando GetDate() in modo che SQL Server lo riconosca come costante e in realtà non esegua il calcolo per ogni riga. Devi usare una colonna dalla tabella attuale. Infine, per testare accuratamente le prestazioni, è necessario eliminare i buffer puliti e liberare la cache delle procedure. Non dovresti farlo su un server di produzione. –