SQL Server like statement issue

问题描述:

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

模式1:

Select foo, goo from tablefoo where zoo like LIKE '%'[email protected]+'%' 

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

Select foo, goo from tablefoo where (zoo1 like LIKE '%'[email protected]+'%') OR (zoo2 like LIKE '%'[email protected]+'%') or (zoo3 like LIKE '%'[email protected]+'%') 

由于事先 乔治

+1

非常有趣的问题。 – 2010-09-09 07:31:14

+1

你如何构建组合列“动物园”?你是否在使用视图,如果是,它是否被索引?您是否使用计算列,如果是,它是否持续?顺便说一句,您的查询可能容易受到SQL注入攻击。 – 2010-09-09 07:40:32

+1

本周我已经回答了类似的问题http://*.com/questions/3649673/what-indices-should-be-created-to-optimize-sql-query-with-multiple-or-conditions/3656415 #3656415 SQL索引几乎落在查询或a或b或c它更好做工会和单独的查询 – u07ch 2010-09-09 07:45:39

或几乎总是杀死性能。

在这种情况下,它是3列扫描vs 1列进行扫描。

在这两种情况下,因为你有一个领导%,则指数将不无论如何使用(可以扫描,因为它涵盖了动物园%列)

的1列是仅仅以3比不那么糟糕列OR查询。不“更好”。

+0

因此,结论是使用没有OR的一点改进? – George2 2010-09-09 10:10:58

+1

@George:在这种情况下,是的。在其他情况下,它可能会更好 – gbn 2010-09-09 10:52:06

+0

使用前导%不使用索引,为什么? – George2 2010-09-09 13:27:41