OK vì vậy tôi đã đọc toàn bộ các bài viết đề xuất các hàm giá trị bảng và áp dụng chéo cho hiệu năng tốt hơn so với udf vô hướng. Tôi muốn viết chức năng của mình theo cả hai cách và sau đó kiểm tra xem cái nào tốt hơn - nhưng tôi không thể tìm ra cái mà tôi phải sử dụng/tìm hiểu xem đó là lựa chọn nào tốt hơn.Kiểm tra hiệu năng của hàm vô hướng so với bảng trong máy chủ sql
Tôi đang sử dụng SQL Server 2005. Tôi đã thử chạy kế hoạch thực hiện ước tính, kế hoạch thực hiện thực tế và phân tích truy vấn trong trình cố vấn điều chỉnh công cụ cơ sở dữ liệu và tôi không biết nó đang cố gắng nói với tôi.
Sử dụng showplan_all bật/tắt có vẻ như chức năng dựa trên bảng sẽ sử dụng nhiều CPU 1.157e-06 hơn 8.3e-05 nhưng hàm bảng có tổng chi phí subtree là 0.000830157 so với 0,01983356.
Chi phí truy vấn của hàm có giá trị bảng cũng dường như có chi phí cao hơn giá trị vô hướng. Mặc dù tôi nghĩ rằng nó được cho là lựa chọn tốt hơn.
Vì vậy, trong khi tôi muốn chứng minh bản thân mình cái nào mang lại hiệu suất tốt hơn - Tôi chỉ không chắc chắn nên tìm những gì trong những công cụ này - vì vậy mọi đề xuất sẽ được đánh giá cao!
Tôi cần có giá trị năm học (dựa trên phạm vi ngày được đặt trong cơ sở dữ liệu) dựa trên ngày lịch để nội dung hàm bên dưới - vì vậy chỉ cho dù tôi sử dụng vô hướng hoặc dựa trên bảng. Năm nay cung cấp các truy vấn khác ..
CREATE FUNCTION fn_AcademicYear
(
-- Add the parameters for the function here
@StartDate DateTime
)
RETURNS
@AcademicYear TABLE
(
AcademicYear int
)
AS
BEGIN
DECLARE @YearOffset int, @AcademicStartDate DateTime
-- Lookup Academic Year Starting Date
SELECT @AcademicStartDate = CONVERT(DateTime,[Value])
FROM dbo.SystemSetting
WHERE [Key] = 'AcademicYear.StartDate'
SET @YearOffset = DATEPART(YYYY,@StartDate) - DATEPART(YYYY,@AcademicStartDate);
-- try setting academic looking start date to year of the date passed in
SET @AcademicStartDate = DATEADD(YYYY, @YearOffset, @AcademicStartDate);
IF @StartDate < @AcademicStartDate
BEGIN
SET @AcademicStartDate = DATEADD(YYYY, @YearOffset-1, @AcademicStartDate);
END
INSERT @AcademicYear
SELECT YEAR(@AcademicStartDate)
RETURN
Cảm ơn !!
Chỉ vì tò mò - bạn có thực sự thấy rằng 'YYYY' dễ đọc hơn, ví dụ:' Year'? –
Tôi đã không thực sự nghĩ về nó .. và lấy cú pháp đó từ chức năng của người khác :) Nhưng có Năm sẽ dễ đọc hơn. – Jen