我使用 SQL Server 2005 编写了一个分页搜索存储过程。它需要一些参数并且搜索条件比较复杂。
由于前端架构,我需要能够返回结果的数量,而这些结果在没有实际返回结果的情况下会返回。前端随后会再次调用存储过程以获取实际结果。
一方面,我可以编写两个存储过程 - 一个处理计数,一个处理实际数据,但我需要至少在两个不同的地方维护搜索逻辑。或者,我可以编写存储过程,使其接受一个位参数,并基于该参数返回数据或仅返回一个计数。也许用数据填充一个临时表,如果它只是计数,就从中进行计数,否则从中进行选择。这里的问题是可以优化计数过程,因此看起来有很多额外的开销(必须获得不需要的列等)。此外,在存储过程中使用这种逻辑可能会导致糟糕的查询计划,因为它在两种用途之间来回切换。
系统中的数据量并不太高(即使是更大的表也只有几百万行)。虽然可能有很多并发用户。
人们对这些方法有何看法?以前有没有人以我没有想到的方式解决了这个问题?
他们不能从一个电话中同时获取结果和计数。
谢谢!
最佳答案
我个人倾向于两种查询方法,是的,你必须在两个地方维护搜索逻辑,但我发现性能优化的好处和代码的整体清洁最终得到返回。
使用传递给单个过程的标志是一个潜在的解决方案,但我发现它很难维护,尤其是对于复杂的搜索逻辑。
使用临时表等的路线只会增加比所需更多的开销。
因此,为什么我会使用两种查询方法。我在网上找到的所有内容也都推荐这种方法。
关于sql - 获取分页 SQL 搜索存储过程的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/259039/