设为首页 - 加入收藏 华夏网 ()- 云主机,资讯,互联网,人工智能,云计算,大赢家论坛,区块链,VR,站长网!
热搜: 系统 芯片 什么 市场
当前位置: 主页 > 水果奶奶论坛 > 正文

SQL – 使用连接过滤大型表 – 最佳实践

发布时间:2021-04-01 13:55 所属栏目:[水果奶奶论坛] 来源:网络整理
导读:我有一个包含大量数据的表,我需要将它与其他一些大表连接起来. 我的桌子中只有一小部分每次都与我有关. 什么时候最好过滤我的数据? 在SQL的where子句中. 使用特定数据创建临时表,然后才加入它. 将谓词添加到第一个内连接ON子句. 其他一些想法. 1. Select * F

我有一个包含大量数据的表,我需要将它与其他一些大表连接起来.

我的桌子中只有一小部分每次都与我有关.

什么时候最好过滤我的数据?

>在SQL的where子句中.
>使用特定数据创建临时表,然后才加入它.
>将谓词添加到第一个内连接ON子句.
>其他一些想法.

1.

Select * 
From RealyBigTable
Inner Join AnotherBigTable On …
Inner Join YetAnotherBigTable On …
Where RealyBigTable.Type = ?

2.

Select * 
Into #temp
From RealyBigTable
Where RealyBigTable.Type = ?

Select * 
From #temp
Inner Join AnotherBigTable On …
Inner Join YetAnotherBigTable On …

3.

Select * 
From RealyBigTable
Inner Join AnotherBigTable On RealyBigTable.type = ? And … 
Inner Join YetAnotherBigTable On …

另一个问题:
先发生什么事?加入还是在哪里?

解决方法

因为您正在使用INNER JOIN,所以WHERE或JOIN辩论仅取决于您的品味和风格.就个人而言,我喜欢在ON子句中保留两个表之间的链接(例如外键约束),并在WHERE子句中保留对数据的实际过滤器.

SQL Server将查询解析为相同的标记树,因此将构建相同的查询执行计划.

如果你使用[LEFT / RIGHT] OUTER JOINS代替它,它会产生一个与众不同的世界,因为不仅性能可能不同,而且很可能是结果.

回答你的其他问题:

什么时候最好过滤我的数据?

>在SQL的where子句中.
>使用特定数据创建临时表,然后才加入它.
>将谓词添加到第一个内连接ON子句.
>其他一些想法.

在WHERE或ON子句中,两者都被视为相同.对于3,“第一内部联接”没有相关性.在多表INNER JOIN场景中,首先(在查询中)首先无关紧要,因为查询优化器将按其认为合适的方式对顺序进行洗牌.

使用临时表是完全没必要的,也无济于事,因为你无论如何都必须提取相关部分 – 这也是JOIN的作用.此外,如果您在JOIN条件/ WHERE过滤器上有一个很好的索引,索引将仅用于访问相关数据而不查看其余表.

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章