我正在使用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+'%')
提前谢谢,
乔治
答案 0 :(得分:3)
或者几乎总是会杀死表演。
在这种情况下,扫描3列,扫描1列。
在这两种情况下,因为你有一个领先的%,所以无论如何都不会使用索引(可能是扫描,因为它覆盖了动物园%列)
1列仅比3列OR查询差。不是“更好”。