如何将结果计为“关于xx行”?

时间:2010-11-02 13:00:53

标签: sql sql-server sql-server-2008 fuzzy-search

我正在寻找的是返回一些行数估计,而不是实际的计数,这可能是一个昂贵的电话。与您在Google搜索中看到的类似( ... 1.000行)。

是否有一些开箱即用的解决方案?如果没有,那么一般方法是什么?

我正在查询Sql Server 2008数据库。

编辑:为了澄清,结果计数与某些用户查询有关。例如,用户搜索“John”,结果应为“大约有1.280.000行与John匹配”

6 个答案:

答案 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

这是来自此处的早期帖子:

Is count(*) really expensive?

答案 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您的特定数据库表。

这个主题有很多内容,你可以看一下这篇介绍性的文章,这篇文章似乎符合你的问题的类似要求:

Microsoft Full Text Search article