sql - 获取分页 SQL 搜索存储过程的计数

标签 sql tsql search stored-procedures paging

我使用 SQL Server 2005 编写了一个分页搜索存储过程。它需要一些参数并且搜索条件比较复杂。

由于前端架构,我需要能够返回结果的数量,而这些结果在没有实际返回结果的情况下会返回。前端随后会再次调用存储过程以获取实际结果。

一方面,我可以编写两个存储过程 - 一个处理计数,一个处理实际数据,但我需要至少在两个不同的地方维护搜索逻辑。或者,我可以编写存储过程,使其接受一个位参数,并基于该参数返回数据或仅返回一个计数。也许用数据填充一个临时表,如果它只是计数,就从中进行计数,否则从中进行选择。这里的问题是可以优化计数过程,因此看起来有很多额外的开销(必须获得不需要的列等)。此外,在存储过程中使用这种逻辑可能会导致糟糕的查询计划,因为它在两种用途之间来回切换。

系统中的数据量并不太高(即使是更大的表也只有几百万行)。虽然可能有很多并发用户。

人们对这些方法有何看法?以前有没有人以我没有想到的方式解决了这个问题?

他们不能从一个电话中同时获取结果和计数。

谢谢!

最佳答案

我个人倾向于两种查询方法,是的,你必须在两个地方维护搜索逻辑,但我发现性能优化的好处和代码的整体清洁最终得到返回。

使用传递给单个过程的标志是一个潜在的解决方案,但我发现它很难维护,尤其是对于复杂的搜索逻辑。

使用临时表等的路线只会增加比所需更多的开销。

因此,为什么我会使用两种查询方法。我在网上找到的所有内容也都推荐这种方法。

关于sql - 获取分页 SQL 搜索存储过程的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/259039/

相关文章:

mysql - 在 PHP/MySQL 中将 SQL 代码插入数据库

sql - 如何判断表是否有标识列

c# - BEGIN TRANSACTION 是否进行任何类型的行/列锁定?

sql-server - 在 SQL Server 中使用透视(错误)- 列名无效

python - 在 pypi 包索引上查找包版本的优雅方法是什么?

database - 是否有命令在 man-db 中安装的所有手册页中搜索字符串

mysql - 检查 mysql IN 的条件是否不工作

sql - 如何在存储过程的t-sql动态语句中使用LIKE?

Python 加速在范围字典中搜索值

mysql - 用几个 LEFT JOIN 查询,没有得到想要的结果