Cảnh báo thiếu số liệu thống kê trong kế hoạch thực hiện


23

Tôi có một tình huống mà tôi không thể hiểu được. Kế hoạch thực thi SQL Server của tôi cho tôi biết rằng tôi đã thiếu số liệu thống kê trên bảng, nhưng số liệu thống kê đã được tạo:

Cảnh báo

Nhưng nếu chúng ta nhìn vào bảng, chúng ta sẽ thấy rằng có một thống kê đã được tạo tự động:

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

Ai đó có thể giúp để hiểu làm thế nào nó có thể được?

Thống kê Auto_Update và Auto_Create được bật trên DB hiện tại.

Tôi đang sử dụng SQL Server 2014.

Câu trả lời:


15

Cảnh báo không phải lúc nào cũng tương ứng với các thống kê cột đơn bị thiếu .

Không có cách nào dễ dàng để xác định chính xác thống kê chính xác mà trình tối ưu hóa đã tìm kiếm và không tìm thấy trong mọi trường hợp, nhưng hầu như luôn luôn là một thống kê nhiều cột sẽ cung cấp một số thông tin tương quan qua nhiều biến vị ngữ trong truy vấn.

Có lẽ trong trường hợp của bạn, nó tương ứng chính xác với các vị từ trong Bộ lọc sau khi quét nơi cảnh báo xuất hiện.

Thật tuyệt nếu SQL Server báo cáo tất cả các cột cho cảnh báo 'thiếu thống kê', nhưng đó không phải là cách nó hoạt động ngày hôm nay, thật không may.

Một số lượng nhất định thử và sai có thể cần thiết để xác định thống kê nhiều cột bạn cần tạo để xóa cảnh báo. Lưu ý rằng số liệu thống kê nhiều cột không thể được tạo tự động. Mặc dù có cảnh báo, bạn có thể hoặc không thể thấy chất lượng của ước tính được cải thiện ngay cả khi thống kê bị thiếu được cung cấp.


8

Vì dường như rõ ràng rằng một thống kê đã tồn tại cho cột cụ thể, tôi đưa ra hai khả năng:

  1. Object Explorer được trỏ đến một cơ sở dữ liệu khác - Tôi nghi ngờ vì cơ sở dữ liệu có DEVtên, vì vậy có thể trong một trường hợp bạn đang nhìn vào dev và trong trường hợp khác thì bạn không.
  2. Kế hoạch đang được sử dụng là từ trước khi thống kê được tạo ra (hoặc nó được tạo ra trước đó hoặc, ít có khả năng, một cái gì đó ngăn chặn một biên dịch lại được kích hoạt khi thống kê được tạo ra).

Vui lòng xác nhận rằng câu trả lời đơn giản (1) không phải là vấn đề và thử đưa ra cùng một truy vấn OPTION (RECOMPILE)để xác nhận hoặc loại trừ (2).


1
Aaron Bertnand, cảm ơn rất nhiều vì đã trả lời của bạn. Nhưng Object Explorer được trỏ đến db hiện tại và việc thêm TÙY CHỌN (RECOMPILE) không khắc phục được sự cố. Tôi cũng muốn thêm rằng truy vấn của tôi đang thực hiện một thủ tục được lưu trữ.
Artash Khachatryan

2

Tôi vừa nhận thấy rằng khi bạn nhận được các cảnh báo như vậy về thống kê, nếu bạn chạy truy vấn hoặc quy trình của mình với các cài đặt bên dưới:

SET SHOWPLAN_ALL ON

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

bạn có thể xem số liệu thống kê còn thiếu là gì:

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

và sử dụng các tập lệnh ở đây, bạn có thể xem các số liệu thống kê hiện đang có, và nếu thiếu, bạn có thể thêm chúng vào.

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.