Thống kê cơ sở dữ liệu là gì và làm thế nào tôi có thể hưởng lợi từ chúng?


18

Tôi đã nghe đề cập đến các số liệu thống kê mà SQL Server giữ theo mặc định. Họ đang theo dõi những gì và làm cách nào tôi có thể sử dụng thông tin này để cải thiện cơ sở dữ liệu của mình?

Câu trả lời:


21

Thống kê đơn giản là một dạng siêu dữ liệu động hỗ trợ trình tối ưu hóa truy vấn trong việc đưa ra quyết định tốt hơn. Ví dụ: nếu chỉ có một tá hàng trong một bảng, thì sẽ không có điểm nào để đến một chỉ mục để thực hiện tra cứu; bạn sẽ luôn luôn tốt hơn khi thực hiện quét toàn bộ bảng. Nhưng nếu cùng một bảng phát triển thành một triệu hàng, thì có lẽ bạn sẽ tốt hơn khi sử dụng chỉ mục. Nhưng nếu bạn truy vấn bảng đó trên một cột chỉ có rất ít giá trị duy nhất (ví dụ: đó có thể là cột "sex" chỉ chứa "M" hoặc "F"), thì thực tế FTS có thể tốt hơn trong trường hợp đó bởi vì bạn sẽ dù sao cũng cần lấy khối để xây dựng tập kết quả. Bây giờ hãy nói rằng bảng của bạn là 99% "M" và chỉ 1% "F", chúng ta nên FTS trong một trường hợp hoặc sử dụng một chỉ mục trong trường hợp khác. Cùng một bảng, cùng một truy vấn, có khả năng bốn kế hoạch truy vấn khác nhau tùy thuộc vào nội dung của bảng. Những loại điều này là "thống kê" và chúng là riêng cho từng cơ sở dữ liệu - thậm chí hai cơ sở dữ liệu có cấu trúc bảng và chỉ mục giống hệt nhau sẽ có số liệu thống kê khác nhau.

Tóm lại, trong một công cụ cơ sở dữ liệu hiện đại, có hai loại tối ưu hóa truy vấn: viết lại SQL (tối ưu hóa dựa trên quy tắc, giống như trình biên dịch viết lại C của bạn để làm cho nó hiệu quả hơn) và chọn đúng đường dẫn dữ liệu (tối ưu hóa dựa trên chi phí , giống như trình biên dịch JIT xác định các điểm nóng khi chạy). Bạn chỉ cần lo lắng về điều này nếu bạn phát hiện ra trình tối ưu hóa truy vấn đang làm điều gì đó rõ ràng sai (ví dụ: chọn FTS khi bạn biết một chỉ mục sẽ tốt hơn).


2
+1 Tôi không thể giải thích điều đó tốt hơn. Điều quan trọng cần nhớ là số liệu thống kê chỉ hữu ích nếu chúng được cập nhật. Điều này có thể được thực hiện với số liệu thống kê cập nhật tự động hoặc lệnh thống kê cập nhật thường xuyên (hàng đêm / hàng tuần). Ngoài ra, xây dựng lại chỉ mục sẽ tự động thực hiện cập nhật thống kê.
Matt M

5

Chúng được sử dụng bởi trình tối ưu hóa truy vấn (whitepaper trên MSDN) để theo dõi phân phối giá trị trong các chỉ mục và / hoặc cột.

Mối quan tâm duy nhất của bạn là cập nhật thường xuyên : chỉ cần rời khỏi công cụ DB để thực hiện công việc của nó


2
Không phải lúc nào. Đôi khi việc tạo một thống kê thủ công có thể giúp thực hiện truy vấn.
mrdenny

@mrdenny: Bạn có thường xuyên làm điều này trong cuộc sống thực không? Rất hiếm. Tôi không có IIRC. Nếu nó cần số liệu thống kê, người ta có thể lập luận rằng nó cần một chỉ số, dù sao cũng có số liệu thống kê. Bạn chỉ có thể tạo số liệu thống kê cột theo TẠO THỐNG KÊ . OP đã phải hỏi về số liệu thống kê Tôi nói đây là một việc nên làm.
gbn

1
Tôi đã làm điều đó một vài lần, nhưng không thường xuyên. Tôi đã đi ngược lại tuyên bố "Mối quan tâm duy nhất của bạn là cập nhật thường xuyên", vì cập nhật số liệu thống kê không phải là điều duy nhất.
mrdenny
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.