sql-server-2008 - T-SQL 优化的条件连接

标签 sql-server-2008 t-sql join query-optimization

大家好,我是来自 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/

相关文章:

sql - WHERE 子句中的可选参数

t-sql 将跟踪平均值与当前数据进行比较

sql-server - 如何使用VBA加速Access和SQL Server之间的表传输?

java - 具有多个条件的 Hibernate Join 表,但 @WhereJoinTable 不起作用

mysql - 多重连接显示多条记录

SELECT 中表名后的 SQL Server 额外文本

sql-server - SP_SEND_DBMAIL @QUERY 在电子邮件中插入换行符

mysql - JOIN 之后选择不同的值(asp 经典)

c# - 与定时器查询相比,SqlDependency(Service Broker)的效率如何?

sql - 外连接/子查询遇到问题