使用OR

时间:2017-06-08 20:57:39

标签: sql-server contains fulltext-index

在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分钟内完成。如果有人为什么一个人表现得比另一个人好,我仍然会感兴趣。谢谢。

1 个答案:

答案 0 :(得分:0)

我刚刚注意到在完成所有这些后我在SqlServer 2016中执行了此测试 - 因此版本之间可能会有性能提升

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

您可以通过启用执行计划(See Method 1 of the accepted answer in this post

,使用Microsoft Management studio使用您自己的数据重复此测试

仅使用两个术语运行两个查询将执行以下执行:

Query set 2 execution

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

  

- 查询1

     

(296行(s)受影响)

     

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

     

- 查询2

     

(296行(s)受影响)

     

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

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

Query set 2 execution

并给出了时间:

  

- 查询1

     

(441行(s)受影响)

     

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

     

- 查询2

     

(441行(s)受影响)

     

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

比较时间,第一种风格增加了7ms,而第二种风格增加了43ms - 几乎增加了50%。 两组之间的增加也表明,随着您增加术语数量,第一种查询样式的性能会更好地扩展。