【发布时间】:2015-11-29 14:37:23
【问题描述】:
我有 2 个表,一个 Base 表引用了另一个 Link 表。
所有键在数据库中都是唯一的。每个表都有一列Market,告诉我们每行数据属于哪个市场。我只对特定市场的数据感兴趣(比如 X)
我的问题是,如果我要加入 2 个表(我希望了解内部联接和左联接 (Base_Table LEFT JOIN Link_Table) 的情况)是否具有 X 的市场过滤器在这两个表上帮助性能?数据方面,我只需要在我的基表上有一个市场过滤器,以确保我获得市场 X 的数据,但是在我的链接表上安装过滤器是否会影响性能:
- 内连接
- 左连接 示例查询:
/内连接/
SELECT --COLUMNS required--
FROM
<Base Table> bt
JOIN
<Link Table> lt
ON
bt.link_column - lt.ID
WHERE
bt.Market = X
AND
lt.Market = X
/左连接/
SELECT --COLUMNS required>--
FROM
<Base Table> bt
LEFT JOIN
<Link Table> lt
ON
bt.link_column - lt.ID
AND lt.Market = X
WHERE
bt.Market = X
过滤子句 lt.Market = X 是否会影响性能?
很遗憾,我们没有查看表索引的权限。
编辑: 我刚刚咨询了一位具有提升权限的同事,我所使用的“表”实际上是视图,它们似乎没有定义任何索引。我们无权访问基础表。但是,我确实设法获得了 2 个查询的执行计划,如下所示。希望他们有所帮助。
基础视图被命名为“订单” 并且链接视图被命名为“调用” Order 有 call id,所以指的是 call。两个视图都有一个指示市场的列
在两个表上使用市场过滤器: Filter on both tables
基表上的市场过滤器: Filter on base table
【问题讨论】:
-
什么是过滤器?发布示例查询。
-
@Frisbee - 将它们添加到问题中。
-
为什么
bt.link_column - lt.ID中的减号? -
如果没有架构信息,这是无法回答的。所有可能的 3 个变体在性能方面可以按任意顺序排列。
标签: sql sql-server performance join