2011-09-09 27 views
5

Tôi đang có một thời gian khá khó khăn trong việc tìm kiếm lý do tại sao việc thêm một chỉ mục trên khóa ngoại của một bảng đang làm chậm lại quan điểm của đồng nghiệp của tôi. Khung nhìn này bao gồm một số khung nhìn được đóng gói với phép nối ngoài và nối bên trong. Tôi đã cố gắng loại bỏ từng cái một để tìm ra vấn đề ở đâu, nhưng tôi không thể nói, nó dường như không xuất phát từ một cái nhìn cụ thể nhưng nhiều hơn từ tất cả chúng.Làm cách nào một chỉ mục có thể làm chậm một câu lệnh chọn?

Tôi biết các chỉ mục có thể làm chậm quá trình chèn hoặc chúng đang chiếm kích thước trên ổ cứng, nhưng tôi không bao giờ đọc ở bất kỳ đâu mà chúng có thể chịu trách nhiệm làm chậm chế độ xem. Sự thật là khi tôi làm:

DBCC FREEPROCCACHE 
DBCC DROPCLEANBUFFERS 
GO 

select top 20 * from MyView 

Mất 20 giây với chỉ mục và 9 không có.

CREATE NONCLUSTERED INDEX [IX_MyField] ON [dbo].MyTable 
(
    [MyField] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, 
    IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, 
    ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY] 
+1

Bạn đã xem kế hoạch truy vấn để xem điều gì đang xảy ra? –

+0

Về mặt lý thuyết, chỉ số làm cho trình tối ưu hóa xem xét nhiều tùy chọn hơn khi xây dựng kế hoạch, nếu nó quyết định cần quét bảng thì có thể làm chậm nó xuống. Tuy nhiên, tôi nghi ngờ rằng sẽ có một hiệu ứng đo lường được. Bạn có thể đăng truy vấn bị ảnh hưởng không? – JohnFx

+0

Bạn có nói rằng chế độ xem là chế độ xem gọi lượt xem (hoặc tôi đã hiểu sai) không? Bạn cần phải dừng lại ngay lập tức nếu có. Các chế độ xem này phải thực hiện đầy đủ tất cả các chế độ xem thấp hơn để hoạt động và cực kỳ chậm khi có một lượng lớn dữ liệu liên quan. Nó là một mẫu đối tượng SQL để có chế độ xem gọi các chế độ xem khác. – HLGEM

Trả lời

9

Có thể chỉ số hoặc chỉ số OTHER của bạn đã lỗi thời. Nếu chúng không hiện tại, có thể trình phân tích truy vấn đang chọn một kế hoạch thực hiện tối ưu phụ bằng cách sử dụng chỉ mục mới của bạn vì nó cho rằng sẽ nhanh hơn.

thử chạy:

UPDATE STATISTICS WITH (FULLSCAN)

trên bàn của bạn.

+1

Đó là đá dude! Bạn đã lưu tuần của tôi! – Arthis

+1

Rất vui được giúp đỡ và vui vì nó hoạt động. Các vấn đề như thế này là một nỗi đau để làm việc qua rất nhiều lần. – JNK

2

Bạn có chọn bất kỳ cột nào khác từ MyTable không? Nếu vậy, có thể bạn đang thực hiện Tra cứu Dấu trang (hoặc Tra cứu RID), điều đó có nghĩa là bạn sẽ quay lại bảng của mình để có thêm dữ liệu.

Bạn nên đặt bất kỳ cột nào bạn bổ sung chọn trong mệnh đề INCLUDE của chỉ mục.

Chạy cả hai truy vấn với các kế hoạch thực thi được bật và so sánh 2, xác định phần nào của truy vấn mất nhiều thời gian hơn.

+0

Cảm ơn bạn đã giải thích, nó không giải quyết được vấn đề của tôi đã giúp tôi hiểu thêm một chút về cách các chỉ mục hoạt động. Chúc một ngày tốt lành! – Arthis

Các vấn đề liên quan