大家好,我是来自 OMDbAPI.com 的 Brian
在尝试对电影和剧集数据使用单个查询时,我遇到了一些障碍。我最近开始在一个单独的表中收集其他剧集详细信息(仅添加了两个新列,季节#/剧集#),我将它们放在一个单独的表中,因为这些列在我的主表中 90% 的时间为空,但是其他列确实适用于电影/剧集(标题/评级/发行日期/情节等)
因此,我尝试使用单个查询来返回电影数据,但如果 ID 的 type = 'episode' 则返回另一个表中的附加字段。问题是我不知道 ID 是一个情节,直到它被查询,并且对数据库的调用越少(执行计划越小)越好,因为每秒调用数百次(目前每天有 25+ 百万个请求) )
我创建了一个小SQL Fiddle我想要实现的目标。
我的问题是,如果是剧集,则以最低性能成本显示这些字段的最佳方法是什么?如果不是,则完全抑制它们?动态 SQL 是我唯一的选择吗?谢谢。
最佳答案
假设每个电影行最多与一个剧集行相关联,则通过将剧集数据放入电影表而不是单独的表中,您一定会获得最佳查询计划。这避免了在查询执行期间必须确定是否查看剧集数据,并且还避免了在确实需要时进行 JOIN。
在电影表中保留 90% NULL 的剧集数据会消耗一些空间,因此会对性能产生一些影响,但我倾向于认为生成的更简单的查询计划将抵消该成本。
我认为,每次加入牌 table 都是你的下一个最佳选择。这为您提供了相当简单的查询计划,并通过减少电影数据的大小来提高性能。不过,作为一般规则,执行的 JOIN 越少,查询运行的速度就越快。
关于sql-server-2008 - T-SQL 优化的条件连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26129309/