两张大表join,如何优化

envykok 2010-05-24 02:15:37
我有两张大表

T1 与 T2

Query:

SELECT
t1.Column1,
t1.Column2,
...
t2.Column1

FROM T1 t INNER JOIN T2 t2 ON t1.ID=t2.ID

对于两张大表(行数均超过5亿)

(1)对ID应该设置为cluster或者non-cluster ??? 理由???
(2) 该用索引视图吗?理由???
(3) 其他意见???理由???
...全文
1415 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
可以考虑避免join,宁可多查几次数据库也要避免join
zhangsong841 2010-05-25
  • 打赏
  • 举报
回复
应该有聚集索引在join的相关列上,
这样记录就以聚集索引列的顺序存储好了,
这样两张大表就是合并连接。

其他高手的意见??
menggang9801 2010-05-24
  • 打赏
  • 举报
回复
学习了东西
wangjianming45 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 envykok 的回复:]

对于两张大表(行数均超过5亿)

(1)对ID应该设置为cluster或者non-cluster ??? 理由???
(2) 该用索引视图吗?理由???
(3) 其他意见???理由???
[/Quote]

(1):ID是否为Cluster Index,这个需要你的业务确认,如果是作为主键的话,肯定设计为Cluster Index
(2):建议使用Table Partition来分拆分表数据,减少对表的压力
(3):应该考虑Where语句,我想不太可能去搜索表所有数据,请在Where语句中的条件筛选字段上建立Index
php_boy 2010-05-24
  • 打赏
  • 举报
回复
如果表1和表2 有相关的列,可以使用 table partition的技术,对表1和表2 进行相同的partition和scheme,
这样对表1和表2进行联合查询,效率比较高,

表1和表2是对齐的,可以内部进行优化,效率很高
satanail 2010-05-24
  • 打赏
  • 举报
回复
额。。。可否把表分割。。例如a表,b表,c表,然后按时间段把你超过5亿行的数据分割到3个或以上的表内,再join?
Q315054403 2010-05-24
  • 打赏
  • 举报
回复
没有Where ??
csw200201 2010-05-24
  • 打赏
  • 举报
回复
ID columns should be set up as clustered indices on both tables. You want to make sure SQL Server uses merge join when both tables are large.

After you create clustered indices, you should run your query and look at the execution plan to ensure that merge join is used.
envykok 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 htl258 的回复:]

太大了,帮顶先
[/Quote]

那如果是5千万*5千万
昵称被占用了 2010-05-24
  • 打赏
  • 举报
回复
能部分提供性能提高的方法:把两个表按ID以同样的策略进行分区
htl258_Tony 2010-05-24
  • 打赏
  • 举报
回复
太大了,帮顶先
昵称被占用了 2010-05-24
  • 打赏
  • 举报
回复
没有条件?

有条件说出条件,要根据条件优化
没条件唯一的方法就是增加硬件,5亿*5亿估计现有的硬件都很难支持了
永生天地 2010-05-24
  • 打赏
  • 举报
回复
(行数均超过5亿)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧