Tại sao hướng dẫn kế hoạch của tôi không được sử dụng?


9

Gần đây chúng tôi đã gặp phải vấn đề điểm tới hạn và một số truy vấn báo cáo được sử dụng để hoàn thành thực thi trong vài giây hiện mất hơn 2 phút vì trình tối ưu hóa truy vấn chỉ đơn giản bỏ qua chỉ mục không được nhóm trên cột tìm kiếm. Một truy vấn ví dụ dưới đây:

select top 100 *
from   [dbo].[t_Call]
where  ID > 0 
  and  throwtime between '3/20/2014 7:00:00 AM' and '3/24/2014 6:59:59 AM'
order by id

Các IDcột là clustered Index và Throwtimecó chỉ số nonclustered. Trong trường hợp này, chúng tôi nhận thấy rằng việc đặt hàng throwtimethay vì thay IDđổi kế hoạch truy vấn và chỉ mục không bao gồm được sử dụng. Chúng tôi cũng đang dự định lưu trữ một số dữ liệu cũ (hiện tại nó có 20 hàng hàng !!). Nhưng thực hiện những thay đổi này trong ứng dụng sẽ mất một thời gian và tôi cần tìm cách làm cho các báo cáo chạy nhanh một cách hợp lý, mà không thực hiện thay đổi ở cấp ứng dụng (ồ, đó là cuộc sống!).

Nhập hướng dẫn kế hoạch. Tôi đã tạo hướng dẫn kế hoạch dưới đây với một gợi ý truy vấn chỉ mục không bao gồm và vì một số lý do, chỉ mục không bao gồm vẫn không được sử dụng. Tui bỏ lỡ điều gì vậy?

EXEC sp_create_plan_guide 
@name = N'[prod2reports_callthrowtime]', 
@stmt = N'select top 100 *
          from   [dbo] . [t_Call]
          where  ID > @0 and @1 < = ThrowTime and ThrowTime < = @2 order by ID',
@type = N'SQL', 
@module_or_batch = N'select top 100 *
                     from   [dbo] . [t_Call]
                     where  ID > @0 and @1 < = ThrowTime and ThrowTime < = @2 order by ID', 
@params = N'@0 int, @1 datetime, @2 datetime', 
@hints = N'OPTION (TABLE HINT( [dbo] . [t_Call],
                   INDEX(IDX_NC_t_call_ThrowtimeProblemCodes)))'
GO

Làm thế nào để chỉ số không cụm? Lý do máy chủ bỏ qua nó là vì nó không nghĩ rằng nó sẽ làm được điều gì tốt. Hoặc bạn có kế hoạch bị lỗi hoặc chỉ mục bị lỗi
Allan S. Hansen

3
Bên cạnh đó, XIN VUI LÒNG thay đổi throwtime between '3/20/2014 7:00:00 AM' and '3/24/2014 6:59:59 AM'thành throwtime >= '20140320 07:00' AND throwtime < '20140324 07:00';- vui lòng xem bài đăng trên blog này và cả bài này .
Aaron Bertrand

@AaronBertrand Cảm ơn rất nhiều. Có, tôi đã đề nghị thay đổi quá và họ sẽ thực hiện nó trong phiên bản tiếp theo.
RK Kuppala

Câu trả lời:


11

Truy vấn phải khớp CHÍNH XÁC, bao gồm cả khoảng trắng. Tôi đề nghị bạn nên lấy truy vấn từ bộ đệm và tạo nó từ đó thay vì nhập nó theo bất kỳ cách nào khác.


0

ĐỌC BÀI VIẾT LIÊN KẾT CỦA BẠN MỘT LẦN NỮA

Viết một hướng dẫn kế hoạch để buộc sử dụng chỉ mục của bạn gần như chắc chắn không phải là điều bạn muốn, vì nó sẽ buộc tra cứu dấu trang không hiệu quả. Theo bài viết của bạn, giải pháp chính xác để thực hiện hiệu quả nhất truy vấn này sẽ là thay đổi chỉ mục của bạn thành chỉ mục không bao gồm cụm, nói cách khác, hoặc thêm tất cả các cột từ bảng của bạn vào chỉ mục hoặc tốt nhất là ) chỉ cần thêm các cột mà bạn cần cho truy vấn này, sau đó thay đổi lựa chọn để chỉ kéo các cột đó.

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.