Tôi có một mạng lưới cơ bản với phân trang được bật trong ứng dụng web của tôi. Lưới này đang được phổ biến bởi dữ liệu SQL thông qua một API Web sử dụng Dapper. Trong bộ điều khiển API của tôi, tôi đang chạy hai truy vấn riêng biệt: một để trích xuất các hàng (được hiển thị trong lưới của tôi) và một để lấy tổng số bản ghi (để hiển thị trong điều khiển phân trang của tôi). Và điều này hoạt động. Tuy nhiên, tôi đang cố gắng tối ưu hóa các truy vấn của mình.Tôi có thể truy xuất các hàng được phân trang và tổng số trong một truy vấn không?
truy vấn đầu tiên của tôi, mà chiết xuất các hàng, trả về chỉ có 50 hàng tại một thời điểm (sử dụng OFFSET
và FETCH
, để cung cấp phân trang:
SELECT DISTINCT T_INDEX.*
FROM T_INDEX
INNER JOIN T_INDEXCALLER ON T_INDEX.IndexId = T_INDEXCALLER.IndexId
WHERE... --a fairly complex WHERE statement
ORDER BY CallTime DESC
OFFSET (@offset) ROWS FETCH NEXT 50 ROWS ONLY
truy vấn thứ hai của tôi chiết xuất số lượng của tất cả các hàng, nhưng sử dụng các bảng tương tự, cùng tham gia, và cùng WHERE
khoản:.
SELECT COUNT(DISTINCT T_INDEX.IndexId)
FROM T_INDEX
INNER JOIN T_INDEXCALLER ON T_INDEX.IndexId = T_INDEXCALLER.IndexId
WHERE... --the same fairly complex WHERE statement
Như tôi đã nói, công trình này và nó t akes khoảng 2,5 giây cho mỗi truy vấn, trong tổng số hơn 5 giây. Thời gian trễ không phải là kết thúc của thế giới, bằng bất kỳ phương tiện nào, nhưng tôi muốn cắt giảm thời gian đó một nửa.
Tôi muốn biết nếu có bất kỳ cách nào để truy xuất 50 hàng và truy lục tổng số TẤT CẢ các hàng trong một truy vấn. Tôi nhận ra rằng hai truy vấn này đang làm hai việc riêng biệt. Nhưng suy nghĩ của tôi là có "có thể" là một cách để tinh chỉnh hai truy vấn này và kết hợp chúng thành một, vì các bảng, tham gia và mệnh đề WHERE
giống nhau giữa hai truy vấn.
Tôi nghĩ rằng đây có thể là những gì tôi đang tìm kiếm. Trên cặp vợ chồng đầu tiên của tôi cố gắng, nó xuất hiện để được làm việc tuyệt vời. Tôi sẽ làm một số tinh chỉnh hơn. –