1

在 SQL Server 2014 中,我尝试使用contains几个不同的术语。该查询花费了非常长的时间,我很好奇分隔包含命令或在同一语句中使用它们是否更快。

例如,使用它是否更快:

WHERE CONTAINS(text, '"term1" or "term2" or "term3"')

或者

WHERE CONTAINS(text, "term1") OR CONTAINS(text, "term2") OR CONTAINS(text, "term3")

使用一个与另一个会有所不同,还是我可能在这里遗漏了一些更基本的东西?

更新

我最终运行了第一个,它在 50 分钟后出错(可能是单独的服务器连接问题)。我运行了第二个选项,查询在 19 分钟内完成。如果有人对为什么一个人的表现可能比另一个人有更好的答案,我仍然会感兴趣。谢谢。

4

1 回答 1

0

在完成所有这些操作后,我注意到我在 SqlServer 2016 中执行了这个测试 - 所以版本之间可能会有性能改进

我会说第一个是基于以下实验的更好的选择,但请注意,我是基于一组相对较小的测试数据,我所做的设置可能过于简化,但我认为它从理论上证明了为什么第一个应该更好。

您可以通过打开执行计划,使用 Microsoft Management Studio 使用您自己的数据重复此测试(请参阅本文中接受的答案的方法 1

仅使用两个术语运行两个查询会执行以下操作:

查询集 2 执行

正如您在第一个查询中看到的,68% 的成本用于扫描索引,32% 用于表函数(包含方法)。第二个,因为现在有两个函数调用要分析 - 表函数的成本增加了。这是查询的时间。

-- 查询 1

(296 行受影响)

SQL Server 执行时间:CPU 时间 = 0 毫秒,经过时间 = 73 毫秒。

-- 查询 2

(296 行受影响)

SQL Server 执行时间:CPU 时间 = 0 毫秒,经过时间 = 100 毫秒。

如果我增加查询中的术语数量,您可以看到这如何影响执行。

查询集 2 执行

并给出时间:

-- 查询 1

(441 行受影响)

SQL Server 执行时间:CPU 时间 = 0 毫秒,经过时间 = 80 毫秒。

-- 查询 2

(441 行受影响)

SQL Server 执行时间:CPU 时间 = 0 毫秒,经过时间 = 143 毫秒。

比较时间,第一种样式增加了 7 毫秒,而第二种样式增加了 43 毫秒——几乎增加了 50%。两组之间的增加还表明,当您增加术语数量时,第一个查询样式的性能应该会更好。

于 2017-06-08T23:15:16.173 回答