W dokumencie Scaling Up Your Data Warehouse with SQL Server 2008 R2 autor zaleca użycie klucza daty w formacie YYYYMMDD jako indeksu klastrowego w tabelach faktów, aby zoptymalizować prędkość zapytania.TSQL DataTime to DateKey Int
Jaki jest najlepszy sposób przekonwertowania pola klucza na klucz daty? Czuję się następujący będzie działać, ale jest nieco niechlujny:
select Replace(CONVERT(varchar,GETDATE(),102),'.','')
Oczywiście, nie używam getdate, lecz data kolumna w tabeli, która będzie używana w moich agregacji.
Po pierwsze, jak zasugerowałbyś dokonanie tej konwersji? Czy mój pomysł jest do przyjęcia?
Po drugie, czy ktoś miał duży sukces, używając klucza daty jako indeksu klastrowego?
konwersji getdate (INT) prosto z wynosi 112 daje 41008 ponieważ to liczba dni od daty 0. Możesz sprawdzić, porównując ten wynik z wynikiem DATEDIFF między 0 a GETDATE(). 'SELECT CONVERT (INT, GETDATE(), 112), DATEDIFF (dzień, 0, GETDATE())' –
@AdamPorad +1 Wiwaty za wyjaśnienie, że – HeavenCore
Myślę, że twój test jest wadliwy. Różnica w czasie, który upłynął, wynika z wyświetlania długiej listy wartości na ekranie.Ponadto używasz GetDate(), więc SQL Server rozpoznaje go jako stałą i nie wykonuje obliczeń dla każdego wiersza. Musisz użyć kolumny z rzeczywistego stołu. Na koniec, aby dokładnie przetestować wydajność, należy usunąć czyste bufory i zwolnić pamięć podręczną procedur. Nie powinieneś tego robić na serwerze produkcyjnym. –