Sql server 使用或时优化SQL包含

Sql server 使用或时优化SQL包含,sql-server,contains,fulltext-index,Sql Server,Contains,Fulltext Index,在SQL Server 2014中,我试图对几个不同的术语使用contains。查询花费了非常长的时间,我很好奇分离contains命令或在同一语句中使用它们是否更快 例如,使用以下各项是否更快: WHERE CONTAINS(text, '"term1" or "term2" or "term3"') 或 使用一个与另一个有区别吗,或者我可能遗漏了一些更基本的东西 更新: 我最后运行了第一个,50分钟后出错(可能是单独的服务器连接问题)。我运行了第二个选项,查询在19分钟内完成。如果有人能更

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

例如,使用以下各项是否更快:

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

使用一个与另一个有区别吗,或者我可能遗漏了一些更基本的东西

更新


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

我刚刚注意到,在完成所有这些之后,我在SQLServer2016中执行了这个测试,因此版本之间可能会有性能改进

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

您可以使用Microsoft Management studio通过打开执行计划()使用自己的数据重复此测试

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

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

--问题1

(296排受影响)

SQL Server执行时间: CPU时间=0毫秒,运行时间=73毫秒

--问题2

(296排受影响)

SQL Server执行时间: CPU时间=0毫秒,运行时间=100毫秒

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

并给出了时间安排:

--问题1

(441行受影响)

SQL Server执行时间: CPU时间=0毫秒,运行时间=80毫秒

--问题2

(441行受影响)

SQL Server执行时间: CPU时间=0毫秒,运行时间=143毫秒

比较计时,第一种样式增加了7毫秒,第二种样式增加了43毫秒,几乎增加了50%。
这两个集合之间的增加还表明性能应该更好,因为随着术语数量的增加,第一个查询样式的伸缩性会更好。

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

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

您可以使用Microsoft Management studio通过打开执行计划()使用自己的数据重复此测试

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

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

--问题1

(296排受影响)

SQL Server执行时间: CPU时间=0毫秒,运行时间=73毫秒

--问题2

(296排受影响)

SQL Server执行时间: CPU时间=0毫秒,运行时间=100毫秒

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

并给出了时间安排:

--问题1

(441行受影响)

SQL Server执行时间: CPU时间=0毫秒,运行时间=80毫秒

--问题2

(441行受影响)

SQL Server执行时间: CPU时间=0毫秒,运行时间=143毫秒

比较计时,第一种样式增加了7毫秒,第二种样式增加了43毫秒,几乎增加了50%。
这两个集合之间的增加还表明性能应该更好,因为随着术语数量的增加,第一个查询样式的伸缩性会更好。

我非常看好第一个。我从来没有试过。你可以测试它。即使我会推荐第一个,但我也从来没有尝试过。可能再次尝试运行第一个,因为索引可能已经过时。您还可以检查执行计划,看看()哪个查询执行得更好。我从来没有试过。你可以测试它。即使我会推荐第一个,但我也从来没有尝试过。可能再次尝试运行第一个,因为索引可能已经过时。您还可以检查执行计划,看看()哪个查询执行得更好。查询1在01:40:29花费了将近两个小时,查询2花费了19分钟。这两个查询都从原来的20000000行返回了13000000行。你说的每一句话都有道理,第一句似乎应该快一点,但对我来说就是这样结束的。我不完全确定这里的外卖是什么,但它在那里。谢谢。我今天又试着运行了查询1,就让它自己去做吧。查询1在01:40:29花费了将近两个小时,查询2花费了19分钟。这两个查询都从原来的20000000行返回了13000000行。你说的每一句话都有道理,第一句似乎应该快一点,但对我来说就是这样结束的。我不完全是
WHERE CONTAINS(text, "term1") OR CONTAINS(text, "term2") OR CONTAINS(text, "term3")