我正在寻找的是返回一些行数估计,而不是实际的计数,这可能是一个昂贵的电话。与您在Google搜索中看到的类似( ... 约 1.000行)。
是否有一些开箱即用的解决方案?如果没有,那么一般方法是什么?
我正在查询Sql Server 2008数据库。
编辑:为了澄清,结果计数与某些用户查询有关。例如,用户搜索“John”,结果应为“大约有1.280.000行与John匹配”
答案 0 :(得分:5)
只需在现有建议中添加外卡......
如果你的统计数据是最新的,那么一个可能的想法就是从你的调用代码中分析估计的执行计划(所以这里的限制是这涉及SQL之外的代码以接收和分析XML)
e.g。
SET SHOWPLAN_XML ON;
SELECT Something
FROM MyTable
WHERE SomeField = 'ABC123'
然后检查返回的XML以获取'EstimateRows'值。
答案 1 :(得分:1)
很难说出你在问什么。如果您正在讨论从搜索算法返回一个数字,您可以根据输入计算一个哈希值,然后使用该哈希值来映射您经常定期维护的计数。这可能会让您“了解”正确的结果,具体取决于哈希的好坏以及更新计数的频率。
答案 2 :(得分:1)
请参阅上面的评论。但是,如果您发现计数操作特别昂贵,那么似乎可以使用以下方法来估算行数:
SELECT rows FROM sysindexes WHERE id = OBJECT_ID('sometable') AND indid < 2
这是来自此处的早期帖子:
答案 3 :(得分:1)
一般方法是采用行的随机样本来估计确实有多少行。例如,如果你的id是UUID,那么你可以在select语句中执行一个过滤器,它将创建一个随机样本。所以你可以看一下id为“f”的行。然后将计数乘以16以得到行计数的估计。你需要为此创建一个快速的索引。
答案 4 :(得分:1)
与我的其他答案分开,因为这是一个完全不同的答案,您可以在TSQL中使用....
另一种可能性是使用TABLESAMPLE子句仅查看指定数量(或百分比)的数据页,然后将其相乘。
e.g。
SELECT COUNT(*)
FROM MyTable TABLESAMPLE(50 PERCENT)
WHERE SomeField = 'ABC123'
需要调整样本量。我建议完整阅读BOL reference,因为它非常有用。
答案 5 :(得分:0)
Vlejkoz,基于您的进一步更新,您似乎正在寻找一般的文本搜索算法,而不是我猜的是您当前昂贵的表查找和连接。
在SQL Server中,您有一个完整的框架,它称为Microsoft全文搜索,并为您提供其他查询功能。这为您提供了搜索语法,更像是传统的模糊风格Google搜索,但taylored torwards您的特定数据库表。
这个主题有很多内容,你可以看一下这篇介绍性的文章,这篇文章似乎符合你的问题的类似要求: