在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分钟内完成。如果有人为什么一个人表现得比另一个人好,我仍然会感兴趣。谢谢。
答案 0 :(得分:0)
我刚刚注意到在完成所有这些后我在SqlServer 2016中执行了此测试 - 因此版本之间可能会有性能提升
我会说第一个是基于以下实验的更好的选择,但请注意,我基于一组相对较小的测试数据,我做的这个设置可能会过度简化,但对于我认为它在理论上证明了为什么第一个应该更好。
您可以通过启用执行计划(See Method 1 of the accepted answer in this post)
,使用Microsoft Management studio使用您自己的数据重复此测试仅使用两个术语运行两个查询将执行以下执行:
正如您在第一个查询中所看到的,有68%的成本用于扫描索引,32%用于表函数(包含方法)。第二,因为现在有两个要分析的函数调用 - 表函数的成本增加了。以下是查询的时间安排。
- 查询1
(296行(s)受影响)
SQL Server执行时间: CPU时间= 0 ms,经过时间= 73 ms。
- 查询2
(296行(s)受影响)
SQL Server执行时间: CPU时间= 0 ms,经过时间= 100 ms。
如果我增加查询中的术语数,您可以看到它如何影响执行。
并给出了时间:
- 查询1
(441行(s)受影响)
SQL Server执行时间: CPU时间= 0 ms,经过时间= 80 ms。
- 查询2
(441行(s)受影响)
SQL Server执行时间: CPU时间= 0 ms,经过时间= 143 ms。
比较时间,第一种风格增加了7ms,而第二种风格增加了43ms - 几乎增加了50%。 两组之间的增加也表明,随着您增加术语数量,第一种查询样式的性能会更好地扩展。