2012-01-19 38 views
10

Tôi đang sử dụng ISNULL trong máy chủ MS SQl 2008, vì bảng của tôi quá lớn, cho dù sử dụng ISNULL có thể gây ra bất kỳ điều gì cho hiệu suất không?Có bất kỳ vấn đề Hiệu suất nào khi sử dụng ISNULL() trong SQL Server không?

Cảm ơn trước

+4

Bạn không thể kiểm tra và xem? –

+1

Phụ thuộc vào rất nhiều thứ, bao giờ hết. Cách bạn sử dụng nó, nơi bạn sử dụng nó, truy vấn của bạn là gì. Chi tiết hơn có thể hữu ích. – Paddy

+0

@SergioTulentsev Tôi đang làm việc trên một dự án nâng cao. Vì vậy, chúng tôi đã thêm một số colomns mới để tbls. Đó sẽ là Null. Các dữ liệu có sẵn để phát triển chỉ là ít. Cơ sở dữ liệu sản xuất rất lớn. Tôi không thể truy cập vào nó. – kbvishnu

Trả lời

8

Nếu bạn cần phải sử dụng nó, sau đó bất kỳ sự khác biệt giữa ISNULL và lựa chọn thay thế như liên hiệp hoặc TRƯỜNG HỢP là rất nhỏ. Đừng lo lắng về điều này

Bất kỳ sự khác biệt nào đến từ cách xử lý dữ liệu. COALESCE/CASE có thể thêm các chuyển đổi kiểu dữ liệu ngầm trong khi ISNULL có các quy tắc đơn giản hơn.

Chỉnh sửa

ISNULL trong danh sách SELECT để chặn NULLS là không đáng kể. Công việc chính sẽ được thực hiện trong xử lý các hàng và dữ liệu. ISNULL bổ sung sẽ không thể đo lường được: Không optimise prematurely

+0

u có thể xem các chú thích – kbvishnu

+1

Như một câu trả lời khác trên bài đăng này, hàm ISNULL có một hồ sơ hiệu suất khác nhau đáng kể khi được sử dụng trong một SELECT vs khi được sử dụng trong một mệnh đề WHERE hoặc JOIN. Kinh nghiệm của tôi xác nhận điều này là đúng. –

+0

@DavidAlpert Đồng ý. Thật dễ dàng để lạm dụng – gbn

9

Có thể. Đối với ưu là viết lại tốt hơn các truy vấn (nếu có thể) để tạo thành

(Field = @x OR @x IS NULL) 

Bởi vì sử dụng các hàm trong một số trường hợp ngăn chặn từ ưu để sử dụng thống kê và đôi khi buộc phải chuyển đổi kiểu dữ liệu ngầm

+0

bạn có thể yêu cầu c d ý kiến ​​ – kbvishnu

+0

truy vấn của tôi: - chọn oldcol, isnull (newcol, 0) 'a' từ tbl. Vì vậy, ở đây tôi đang sử dụng ISNULL. Bạn có thể giải thích một chút dựa trên truy vấn của bạn không. thanks – kbvishnu

+2

Trong trường hợp của bạn, hiệu quả của việc sử dụng ISNULL là không đáng kể –

0

Vì nó đã được đề cập nó phụ thuộc về cách thức và nơi bạn đang sử dụng nó trong truy vấn của bạn. Có thể bạn có thể muốn hiển thị cách bạn đang sử dụng nó trong truy vấn của bạn.

Ngoài ra tôi sẽ khuyên bạn nên đi qua này - What makes a SQL statement sargable?

0

Nó phụ thuộc vào cách bạn đang useing nó, nhưng bạn can build execution plans trong cả hai trường hợp (với ISNULL() và nếu không có nó) và so sánh kết quả.

35

ISNULL() trong mệnh đề lựa chọn có ảnh hưởng không đáng kể đến hiệu suất. Mặt khác, ở mệnh đề where, nó có thể có tác động rất lớn đến hiệu suất, vì nó ngăn cản trình tối ưu hóa sử dụng một chỉ mục trên cột đó.

where isnull(col1, 0) = 0 -- unable to use index, because every 
          -- row has to be evaluated 

where col1 = isnull(@myVar, 0) -- index will be used, since isnull(@myVar, 0) 
           -- returns the same static value for every row and 
           -- not every row has to be evaluated by the function. 

Vì vậy, khi sử dụng isnull() trong mệnh đề where, đánh giá xem nó có ngăn chặn trình tối ưu hóa truy vấn sử dụng chỉ mục hay không. Nếu vậy, hãy xem xét việc tạo một cột được tính toán với kết quả nếu isnull (col1, 0) và lập chỉ mục cột được tính toán và sử dụng nó trong mệnh đề where của bạn.

+0

Lưu ý rằng hai điều kiện này không cho kết quả tương tự. – Atario

1

Tránh sử dụng isNull trong mệnh đề where. Tham khảo This article.

+0

Xin chào - câu hỏi này đã có câu trả lời được chấp nhận. Đây là thông tin tốt, nhưng sẽ tốt hơn như một bình luận :) – landons

+0

Tôi không nhận được bài viết đó. Nó đang nhìn vào cột trần truồng rồi. Isnull (@someVar, 0) không nên tốn kém. Isnull (someColumn, 0) có thể tốn kém nếu điều đó làm cho chỉ mục không được sử dụng. –

+0

Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. - [Từ đánh giá] (/ đánh giá/bài đăng chất lượng thấp/18966014) – derloopkat

1

Có có một vấn đề hiệu suất afaik, trong SQL Server Studio 2012.

Vấn đề là khá rõ ràng khi tôi sử dụng ISNULL kết hợp với OVER. Sau khi tối ưu hóa (tức là đặt ISNULL trong truy vấn phụ tôi đang sử dụng OVER bật) thời gian chạy giảm từ (ước tính) 25,2 giờ xuống còn 102 giây.

Đoán của tôi là ISNULL là OK khi bạn chạy nó trên toàn bộ một cột (ví dụ: trong đồng bằng-ol 'SELECT). Nhưng khi bạn chạy nó với OVER, nó được gọi là mới mỗi lần, do đó kéo xuống hiệu suất.

Chưa sẵn sàng để xem chi tiết hơn. Đơn giản chỉ cần đặt nó ở đây để tham khảo của người khác.

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