Tôi đang cố viết phân trang theo kích thước cơ sở dữ liệu của kết quả truy vấn. Vì SQL Server 2012 cung cấp OFFSET/FETCH
, tôi đang sử dụng nó. Nhưng sau khi tôi thêm câu lệnh vào truy vấn của mình, nó mất gấp 10 lần.Hiệu suất chậm khi sử dụng OFFSET/FETCH với Fulltext trong SQL Server 2012
Các truy vấn:
SELECT
p.ShopId,
count(1) as ProductsQuantity,
MIN(LastPrice) as MinPrice,
MAX(LastPrice) as MaxPrice
FROM Product2 p WITH (NOLOCK)
INNER JOIN
CONTAINSTABLE(Product2, ProductName, 'czarny') AS KEY_TBL
ON KEY_TBL.[key]=p.Id
WHERE
(p.LastStatus > 0 OR p.LastStatus = -1)
GROUP BY p.ShopId
ORDER BY p.ShopId asc
SELECT
p.ShopId,
count(1) as ProductsQuantity,
MIN(LastPrice) as MinPrice,
MAX(LastPrice) as MaxPrice
FROM Product2 p WITH (NOLOCK)
INNER JOIN
CONTAINSTABLE(Product2, ProductName, 'czarny') AS KEY_TBL
ON KEY_TBL.[key]=p.Id
WHERE
(p.LastStatus > 0 OR p.LastStatus = -1)
GROUP BY p.ShopId
ORDER BY p.ShopId asc
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY
Đầu tiên truy vấn trả về kết quả trong 3 giây, một giây trong 47 giây. kế hoạch thực hiện là khác nhau, và chi phí của thứ hai được đánh giá chỉ là 7%, những gì hoàn toàn làm cho không có ý nghĩa với tôi:
Tôi cần giúp đỡ làm thế nào để cải thiện hiệu suất của pagination.
+1 cho câu hỏi này, chỉ cần ra khỏi factyou thêm một giải thích kế hoạch mà không cần bất cứ ai aksing cho nó và đây là thực sự là một vấn đề phân trang trong T-SQL gặp khá thường xuyên – Najzero