【发布时间】:2017-12-22 14:57:55
【问题描述】:
我有一个在我的网络应用程序中启用了分页的基本网格。该网格由 SQL 数据通过使用 Dapper 的 Web API 填充。在我的 API 控制器中,我正在运行两个单独的查询:一个用于提取行(显示在我的网格中),另一个用于获取记录总数(显示在我的分页控件中)。这有效。但是,我正在尝试优化我的查询。
我的第一个查询,提取行,一次只返回 50 行(使用OFFSET 和FETCH,提供分页:
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
我的第二个查询提取所有行的计数,但使用相同的表、相同的连接和相同的 WHERE 子句:
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
正如我所说,这行得通。每次查询大约需要 2.5 秒,总共需要 5+ 秒。无论如何,时间延迟并不是世界末日,但我想把时间减半。
我想知道是否有任何方法可以检索 50 行和检索一个查询中所有行的总数。我意识到这两个查询正在做两件不同的事情。但我的想法是“可能”有一种方法可以调整这两个查询并将它们组合成一个,因为表、连接和 WHERE 子句在两者之间是相同的。
【问题讨论】:
标签: sql sql-server