Tôi có một truy vấn lớn mà tôi đang cố gắng điều chỉnh. Tôi viết rất nhiều truy vấn nhưng chưa thực hiện nhiều điều chỉnh. Tôi đã bao gồm một ảnh chụp màn hình từ SQL Sentry Plan Explorer Free (SSPEF):
Trong phần trên của kế hoạch, bảng pb_WorkRquestLog chứa 229.001 hàng. Tuy nhiên, kế hoạch truy vấn đang hiển thị khoảng. 348 triệu hàng (229.001 x 1.520 lần lặp):
Không có mệnh đề where nên truy vấn đang sử dụng Quét chỉ mục cụm. Tôi đã xây dựng lại tất cả các chỉ mục với FULLSCAN và cập nhật tất cả các số liệu thống kê.
Mã mà phần này của kế hoạch đang thực hiện là:
select distinct
wrs.ServiceKey
, owner.DepartmentName AS GroupName
, owner.UserName AS UserId
, owner.WRLCreateDateTime
, owner.WRLNotes
, wrx.CreatedDate as WRCreateDateTime
, wrx.Id
, wrx.Description
, cast(wrx.Notes as varchar(2500)) as Notes
from
prism72ext.dbo.pb_WorkRequestService wrs
Join prism72ext.dbo.pb_WorkRequest wrx on (wrs.WorkRequestId = wrx.Id and wrx.Status = 'Incomplete')
left join (
select
wl.WorkRequestId
, d.Name AS DepartmentName
, u.UserName
, wl.CreatedDate as WRLCreateDateTime
, cast(wl.Notes as varchar(2500)) as WRLNotes
from
(
SELECT
MAX( Id ) AS Id
FROM
prism72ext.dbo.pb_WorkRequestLog WITH(INDEX(0))
GROUP BY
WorkRequestId
) mwl
join prism72ext.dbo.pb_WorkRequestLog wl on mwl.Id = wl.Id
join prism72Ext.dbo.pb_Department d ON wl.DepartmentId = d.DepartmentId
left join prism72Ext.dbo.pb_User u on wl.UserId = u.UserId
) owner on wrs.WorkRequestId = owner.WorkRequestId
SSPEF đang báo cáo Kích thước dữ liệu thực tế là gần 5GB, với 3 triệu lượt đọc hợp lý! SSMS báo cáo bảng chỉ có kích thước 16 MB.
Tôi đã điều chỉnh truy vấn từ 4m28 xuống còn 1m35, nhưng giờ tôi bị kẹt. Tôi sẽ biết ơn nếu bất cứ ai có thể chỉ cho tôi đi đúng hướng để giải quyết vấn đề này.
Chỉnh sửa: Ai đó đề nghị thử "TÙY CHỌN (HASH THAM GIA, THAM GIA MERGE)". Điều này đã tạo ra một sự khác biệt lớn. I / O được giảm ồ ạt và truy vấn chạy trong 13 giây.
Có ai thấy bất kỳ vấn đề với giải pháp này?