Sql server 在应用程序中使用较小的页面时,如何获取过滤器元素以形成较大的搜索结果?

Sql server 在应用程序中使用较小的页面时,如何获取过滤器元素以形成较大的搜索结果?,sql-server,tsql,Sql Server,Tsql,我有一个搜索查询,返回一堆记录,但我们使用分页,所以我们只返回10、25或50页的数据子集。基本上,存储过程是这样的 WITH search_results AS ( SELECT model, brandname, msrp, ROW_NUMBER() OVER (ORDER BY @sortExpression) as rowNumber FROM models WHERE ...criteria.... ) SELECT * FROM search_res

我有一个搜索查询,返回一堆记录,但我们使用分页,所以我们只返回10、25或50页的数据子集。基本上,存储过程是这样的

WITH search_results AS
(
    SELECT model, brandname, msrp,
    ROW_NUMBER() OVER (ORDER BY @sortExpression) as rowNumber
    FROM models
    WHERE ...criteria....
)

SELECT * FROM search_results
WHERE rowNumber BETWEEN ((@pageNumber-1)*@pageSize)+1 and ((@pageNumber-1)*@pageSize)+@pageSize
当我使用小页面时,我的存储过程会很快恢复,通常不到一秒钟。然而,有时我们的用户会输入可能返回几千到一万条记录的条件。他们会翻页,一次只抓取几个,但实际的搜索结果有很多。当我的页面大小很小时,存储过程运行得很快,但当我增加它时,它需要几秒钟,这太长了

这一切都很好,我使用更小的页面。问题是我们的解决方案中有一部分是过滤器。此筛选器列出了完整搜索结果的所有品牌、类别和4个价格范围象限。因此,当他们点击过滤器时,它会以最低的价格和最高的价格,将其分成4个大小相等的分组,并在表单上显示复选框。用户可以检查要筛选的范围以及要筛选的品牌和类别。这将使用新条件重新提交搜索


我不知道如何在不运行两次主程序(在WITH中)的情况下返回全套品牌、类别和最高/最低价格。将所有这些转储到一个临时表中,然后将多个记录集返回到我的业务对象,这样做有意义吗?结果、品牌列表、类别列表,然后是最低和最高价格?有没有一种模式可以为这样的搜索结果返回过滤信息?

答案是没有,没有模式,可能是。尝试将原始大结果放入临时表中,并使用它返回多个记录集。测试它,看看它是否工作得更好。这样做你(通常)使用更多的内存和更少的CPU。在tunning业务中,有时会有一些折衷,您可以通过交换内存/IO/CPU使用来加快速度