T-SQL优化条件连接

时间:2014-09-30 20:16:23

标签: sql-server-2008 tsql join query-optimization

嘿,伙计们来自OMDbAPI.com的Brian

在尝试对Movie和Episode数据使用单个查询时,我遇到了一点速度障碍。我最近开始在一个单独的表中收集额外的Episode详细信息(只添加了两个新列,Season#/ Episode#)我将它们放在一个单独的表中,因为这些列在我的主表中将在90%的时间内为空其他栏目适用于电影/剧集(标题/评级/发行日期/剧情等)

所以我尝试使用单个查询来返回电影数据,但如果ID有类型='剧集'从其他表返回其他字段。问题是我不知道ID是一个插曲,直到它被查询,并且对数据库的调用次数越少(执行计划越小)越好,因为这被称为每秒数百次(目前每天要求超过2500万次)

我创建了一小部分SQL Fiddle我想要实现的目标。

我的问题是,如果这些字段是一集并且如果没有完全抑制它们,那么显示这些字段的性能成本最低的最佳方法是什么?动态SQL是唯一的选择吗?感谢。

1 个答案:

答案 0 :(得分:2)

假设每个电影行最多与一个剧集行相关联,您肯定会通过将剧集数据放在电影表而不是单独的一个中来获得最佳查询计划。这避免了在查询执行期间必须确定是否查看剧集数据,并且在您需要时也避免了对JOIN的任何需要。

在Movie表中拥有90%的NULL剧集数据会花费您一些空间,因此会产生一些性能影响,但我倾向于认为结果更简单的查询计划将抵消该成本。

我认为,每次加入桌子都是你最好的选择。这为您提供了相当简单的查询计划,并通过减少Movie数据的大小来寻求性能提升。但是,作为一般规则,您执行的JOIN越少,查询运行的速度就越快。