Chỉ mục và Thống kê trên bảng Temp


7

Tôi vừa nâng cấp kho dữ liệu của chúng tôi lên SQL 2016. Tôi thấy một số biểu đồ thực sự thú vị trong Cửa hàng truy vấn (Tôi thích tính năng này!). Dưới đây là ví dụ kỳ lạ nhất mà tôi đã thấy. 22 kế hoạch cho cùng một truy vấn.

nhập mô tả hình ảnh ở đây

Nó khiến tôi xem xét điều chỉnh hiệu suất của quy trình ETL của tôi và ưu và nhược điểm của các bảng tạm thời và cách bạn có thể ảnh hưởng đến hành vi của kế hoạch thực hiện.

Quy trình ETL của tôi sử dụng một số quy trình được lưu trữ sử dụng kết hợp #tables tiêu chuẩn và tạm thời làm bảng phân tầng. Các #tables thường được sử dụng một lần và sau đó bỏ đi. Một số chỉ có vài ngàn hàng. Một số là hàng triệu. SSMS khuyên rằng có các chỉ mục bị thiếu, nhưng trên các bảng nhỏ hơn, liệu chúng có tạo ra đủ sự khác biệt để xứng đáng với nỗ lực thêm chúng không? Là số liệu thống kê tốt hơn đủ?

Tôi vừa đọc bài đăng trên blog Brent Ozar này về Thống kê trên các bảng Temp và bài viết của Paul White về các Bảng tạm thời trong các thủ tục được lưu trữ

Nó nói rằng các số liệu thống kê được tạo tự động, khi #table được truy vấn, và sau đó có lẽ được sử dụng bởi trình tối ưu hóa.

Câu hỏi của tôi là: Có nhiều điểm hay lợi ích trong việc tạo chỉ mục trên #table. Và / hoặc: Có đáng để cập nhật thống kê một cách rõ ràng như một bước trong quy trình được lưu trữ trước khi sử dụng nó trong các truy vấn được cung cấp mà chúng chỉ được sử dụng một lần.

Là các bước bổ sung và chi phí có đáng không? Nó sẽ dẫn đến kế hoạch thực hiện tốt hơn hoặc khác nhau đáng kể?

Câu trả lời:


6

Có thể có lợi ích trong việc tạo chỉ mục trên các bảng tạm thời, nhưng có thể không cho bảng phân tầng. Thật không may, đó là một câu trả lời "nó phụ thuộc". Bạn sẽ cần phải kiểm tra. Nếu bạn đã đăng mã cho cách bạn tương tác với bảng phân tầng, chúng tôi có thể giúp xác định xem có chỉ mục nào giúp ích không. Một ví dụ về nơi một chỉ mục có thể giúp đỡ là nếu bạn đang tham gia bảng tạm thời sang một bảng khác. Nếu bạn đã lập chỉ mục cột đã tham gia, có thể có hiệu suất tăng, đặc biệt là nếu có nhiều hàng trong bảng tạm thời.

Bạn có thể không cần cập nhật số liệu thống kê trên các bảng tạm thời. Đây cũng là một câu trả lời "tùy thuộc", mặc dù tôi chưa bao giờ thấy số liệu thống kê cập nhật trên các bảng tạm thời trong hàng ngàn trên hàng ngàn thủ tục được lưu trữ mà tôi đã xem, tôi cũng không cần phải thêm nó để giải quyết vấn đề về hiệu suất.


4

Thống kê thôi là chưa đủ. Công cụ lưu trữ phải có một số cách để đến các hàng khớp với vị từ truy vấn. Không có giá trị khi biết rằng, giả sử, ba hàng khớp với điều kiện trong số một triệu trong bảng nếu nó không thể xác định chúng là ba hàng nào. Không có chỉ mục, chiến lược duy nhất là quét bảng. Một triệu hàng sẽ được đọc. 99.9997% sẽ bị loại bỏ. Với một chỉ mục phù hợp, các con trỏ có thể được theo dõi để chọn ra ba hàng cần thiết.

Với các bảng nhỏ chỉ cần một vài trang, người ta phải tính đến nỗ lực đọc các trang chỉ mục. Giả sử một chỉ mục không được nhóm phù hợp với truy vấn chính xác chỉ cần hai cấp độ. Đó là hai trang đọc để làm theo các phím. Sau đó, chỉ số cụm được theo sau. Đó cũng có thể là hai trang đọc thêm. Vì vậy, nếu toàn bộ ít hơn 4 trang mà chỉ mục không được nhóm không thể sử dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.