我在网站中重写了一个搜索功能,该网站过去常常向数据库服务器进行13次往返以构建结果页面。我基本上做的是将所有这13个查询放在一个大字符串中,而不是向db发送13个往返,现在我只发送1然后处理返回的多个结果集。
这个大查询基本上由主选择
组成 sum(case when Nationality = 'Brazil' then 0 else 1 end) as nonBrazilians
用于分页,其他12个用作子查询而没有分页部分来构建一些过滤器框来帮助用户缩小结果(就像亚马逊搜索结果一样)。
这很有效。
问题在于我有这样的感觉,这是不对的。这可能更有效率。我不是DBA或专家SQL Server编码器,很明显,重复13次的相同查询似乎并不正确。
SQL Server是否足够聪明,可以在不做任何更改的情况下对其进行优化?
我的一个朋友建议我使用一个表变量并插入其中的所有行,然后我用它来获取"过滤器框所使用的数据"并使用此相同的变量返回分页数据。但是默认页面大小只有20,如果我有10000个项目怎么办?这会有效吗?
我假设只有一次往返更有效率。也许在2分裂?
任何提示都会非常感激!