【发布时间】:2015-03-22 23:09:29
【问题描述】:
我在使用 GROUP BY 与 UNION 时表现不佳。见下文
使用 GROUP BY,~ 17 秒
select b.BookTypeKey, count(b.BookKey)
from Books b
where contains(b.BookTitle, @SearchTerm)
group by b.BookTypeKey
使用 UNION,~ 1-2 秒
select '1' as BookTypeKey, count(b.BookKey)
from Books b
where contains(b.BookTitle, @SearchTerm) and b.BookTypeKey = 1
union
select '2' as BookTypeKey, count(b.BookKey)
from Books b
where contains(b.BookTitle, @SearchTerm) and b.BookTypeKey = 2
union
select '3' as BookTypeKey, count(b.BookKey)
from Books b
where contains(b.BookTitle, @SearchTerm) and b.BookTypeKey = 3
有什么想法吗?理想情况下,我想这样做而不必使用三个单独的 UNION 语句。仅供参考,只有三种“BookTypes”(1,2 和 3)
【问题讨论】:
-
看看执行计划,看看有什么区别?
-
似乎如果您以一种方式获得更好的性能,那么您会使用这种方式。有时您需要更复杂的代码才能获得更好的性能。除此之外,不确定我们能否在不了解您的整个架构或执行计划的情况下提供具体信息。
-
@Jeremy 如何查看执行计划?我正在使用 SQL Management Studio 2008
-
您是否使用多次运行对这些进行计时,以确保差异不是缓存差异?
-
将鼠标悬停在大红色感叹号右侧的按钮上,找到带有“包括实际执行计划”的工具提示的按钮,然后再次运行您的查询。您将在结果右侧看到另一个选项卡。
标签: sql sql-server performance tsql