10

Mà các truy vấn sau đây là tốt hơn ... Đây chỉ là một ví dụ, có rất nhiều tình huống, nơi tôi muốn tên người dùng sẽ được hiển thị thay vì UserIDbên tham gia Vs Chức năng vô hướng

Select EmailDate, B.EmployeeName as [UserName], EmailSubject 
    from Trn_Misc_Email as A 
     inner join 
     Mst_Users as B on A.CreatedUserID = B.EmployeeLoginName 

hoặc

Select EmailDate, GetUserName(CreatedUserID) as [UserName], EmailSubject 
    from Trn_Misc_Email 

Nếu không có hiệu quả lợi ích trong việc sử dụng Trước tiên, tôi muốn sử dụng thứ hai ... tôi sẽ có khoảng 2000 bản ghi trong tài khoản bảng và 100k bản ghi trong bảng email ...

Cảm ơn

+0

Bạn đã tự thử điều này chưa? –

Trả lời

11

Câu hỏi hay và tuyệt vời khi suy nghĩ về hiệu suất SQL, v.v.

Từ điểm xem SQL thuần túy, đầu tiên là tốt hơn. Trong câu lệnh đầu tiên, nó có thể thực hiện mọi thứ trong một lệnh lô đơn lẻ với một phép nối. Trong lần thứ hai, đối với mỗi hàng trong trn_misc_email, nó phải chạy một BATCH riêng biệt để chọn tên người dùng. Điều này có thể gây ra vấn đề về hiệu suất ngay bây giờ hoặc trong tương lai

Nó cũng háo hức để đọc cho bất kỳ ai khác tham gia dự án khi họ có thể xem điều gì đang xảy ra. Nếu bạn có cái thứ hai, sau đó bạn đã phải đi và nhìn vào chức năng (tôi đoán đó là những gì nó là) để tìm hiểu những gì đang làm.

Vì vậy, trong thực tế, hai lý do để sử dụng lý do đầu tiên.

3

SQL nội tuyến JOIN thường sẽ là better than the scalar UDF vì nó có thể được tối ưu hóa tốt hơn.

Khi thử nghiệm, hãy đảm bảo sử dụng SQL Profiler để xem chi phí của cả hai phiên bản. SET STATISTICS IO ON không báo cáo chi phí cho các UDF vô hướng trong các số liệu của nó sẽ làm cho phiên bản UDF vô hướng xuất hiện tốt hơn thực tế.

+0

Bạn có bất kỳ tài liệu tham khảo nào giúp tôi hiểu về kế hoạch Thực thi và Thống kê Thông tin –

+3

@ The King - Xem ebook miễn phí này ["Phân tích các Kế hoạch Thực thi SQL Server" của Grant Fritchey] (http: //downloads.red-gate. com/ebooks/HighPerformanceSQL_ebook.zip) –

1

Để giúp bạn nhiều hơn, chỉ cần một mẹo, trong máy chủ SQL sử dụng Studio quản lý, bạn có thể đánh giá hiệu suất theo Display Estimated execution plan. Nó cho thấy cách các chỉ mục và tham gia hoạt động và bạn có thể chọn cách tốt nhất để sử dụng nó.

Ngoài ra, bạn có thể sử dụng DTA (Cơ sở điều chỉnh bộ máy cơ sở dữ liệu) để biết thêm thông tin và tối ưu hóa.

+1

Các UDF vô hướng được xem như một hộp đen trên cái này tôi nghĩ. –

+1

Bạn có bất kỳ tài liệu tham khảo nào giúp tôi hiểu về kế hoạch Thực thi và Thông tin Thống kê hay không. –

+0

@ Martin Smith, không, kế hoạch thực hiện hiển thị rõ ràng với tất cả các bước và những gì xảy ra như chi phí, .... Bạn có thể thử một mình. Cộng với một bộ nhớ cache UDF vô hướng kế hoạch thực hiện để tối ưu hóa việc thực thi trong lần chạy tiếp theo –

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