我有一个简单的工具可以在给定的数据库中进行搜索。用户可以提供许多条件,我的工具根据它将sql查询放在一起。但是,我想阻止执行查询,以防它返回太多记录。对于例如如果用户将所有过滤器留空,则查询将从数据库中提取所有记录,这将花费数十分钟。当然,对我的任何用户来说都没有必要。所以我想要一些限制。
我正在考虑在每个' real'之前运行具有相同条件的count()
sql查询。查询,但这需要太多时间。
是否可以选择在'期间衡量记录?如果达到一定数量的查询并停止它?抛出一些异常,要求用户优化搜索。
答案 0 :(得分:3)
我使用这种方法:
说明您要获取AT MOST 100行。构造您的查询,使其最多返回101行(TOP N
或更通用的ANSI方式,通过过滤row_number
)。然后您可以轻松检测是否还有更多。在我的情况下,您可以采取相应的行动,展示“阅读更多”。
答案 1 :(得分:1)
您可以运行测试查询以使用用户定义的选项搜索数据库,并仅返回返回结果的id字段,这将非常快,并且还允许您测试count()。 然后,如果一切正常,那么您可以运行完整查询以返回所有结果。
答案 2 :(得分:0)
根据上面的答案,如果您正在处理大量数据,请使用快速查询选项选择前N个。
E.g。
SELECT TOP 101 [ColumnName]
FROM [Table]
OPTION (FAST 101)
答案 3 :(得分:0)
这取决于您的应用程序以及您希望它如何工作。
如果您只想在表格上显示数据并为查询设置最大尺寸就足够了。您可以在select语句中使用TOP。
SELECT TOP N [ColumnName]
但是考虑到你说计数需要花费太多时间,那么我认为你担心处理一个非常大的数据集并且可能操纵它不一定只是从查询中获取一组有限的数据。
然后一种方法是将作业拆分为块并跨越作业大小,因此抓取前N行然后接下来的N行并重复,直到没有更多值要返回。您还可以为回滚和检查点保留记录,以确保数据完整性。
类似的问题可能: query to limit records returned by sql query based on size of data
How to iterate through a large SQL result set with multiple related tables