Trong Scaling Up Your Data Warehouse with SQL Server 2008 R2, tác giả đề xuất sử dụng khóa ngày nguyên trong định dạng YYYYMMDD làm chỉ mục nhóm trên bảng thực tế của bạn để giúp tối ưu hóa tốc độ truy vấn.TSQL DateTime to DateKey Int
Cách tốt nhất để chuyển đổi trường ngày khóa của bạn thành Khóa ngày là gì? Tôi cảm thấy những điều sau đây sẽ làm việc, nhưng là một chút cẩu thả:
select Replace(CONVERT(varchar,GETDATE(),102),'.','')
Rõ ràng, tôi không sử dụng getdate, mà là một cột ngày trong bảng sẽ được sử dụng trong quy tụ của tôi.
Trước tiên, bạn đề xuất thực hiện chuyển đổi này như thế nào? Ý tưởng của tôi có được chấp nhận không?
Thứ hai, có ai có nhiều thành công khi sử dụng Khóa ngày làm chỉ mục nhóm không?
chuyển đổi getdate() thẳng vào INT với IS 112 cung cấp cho 41.008 vì đó là số ngày kể từ ngày 0. Bạn có thể xác thực bằng cách so sánh kết quả đó với kết quả của DATEDIFF giữa 0 và GETDATE(). 'SELECT CONVERT (INT, GETDATE(), 112), DATEDIFF (ngày, 0, GETDATE())' –
@AdamPorad +1 Chúc mừng để làm rõ rằng – HeavenCore
Tôi nghĩ rằng thử nghiệm của bạn là thiếu sót. Sự khác biệt trong thời gian trôi qua là kết quả của việc hiển thị danh sách dài các giá trị cho màn hình.Ngoài ra, bạn đang sử dụng GetDate() để SQL Server nhận ra nó như là một hằng số và không thực sự thực hiện tính toán cho mỗi hàng. Bạn cần sử dụng một cột từ bảng thực tế. Cuối cùng, để kiểm tra chính xác hiệu suất, bạn cần phải xóa bộ đệm sạch và giải phóng bộ nhớ cache thủ tục. Bạn không nên làm điều này trên một máy chủ sản xuất. –