SQL Server之类的语句问题

时间:2010-09-09 07:15:41

标签: sql-server tsql pattern-matching

我正在使用SQL Server 2008 Enterprise。现在我有两个模式来实现相同的功能(看看zoo1或zoo2或zoo3列是否包含一些文本,在模式1中,我合并了zoo1,zoo2和zoo3的内容以形成一个名为zoo的新列),我认为第一个从我的实验中,模式总是有更好的表现(我做了一些实验)。但我不确定我是否正确,为什么模式1总是具有更好的性能的内部原因是什么?

模式1:

Select foo, goo from tablefoo where zoo like LIKE '%'+@Query+'%'

模式2(动物园是我合并列zoo1,zoo2和zoo3的内容以生成的列):

Select foo, goo from tablefoo where (zoo1 like LIKE '%'+@Query+'%') OR (zoo2 like LIKE '%'+@Query+'%') or (zoo3 like LIKE '%'+@Query+'%')
提前谢谢, 乔治

1 个答案:

答案 0 :(得分:3)

或者几乎总是会杀死表演。

在这种情况下,扫描3列,扫描1列。

在这两种情况下,因为你有一个领先的%,所以无论如何都不会使用索引(可能是扫描,因为它覆盖了动物园%列)

1列仅比3列OR查询差。不是“更好”。