最新消息: 关于Git&GitHub 版本控制你了解多少?
您现在的位置是:群英 > 开发技术 > PHP语言 >
sql server如何实现hash应用优化?
IT168发表于 2020-12-14 17:21 次浏览
hash连接方面,mssql一般都是对于超大数据集而言,对于hash连接的优化,需要区分连接的大小表,以确定构建表和探索表,由于构建表先行,而且hash连接都是超大表的连接,所以需要特别节省内存,在hash节省内存方面的优化,主要是对于查询树的形状进行规划,左深度,右深度,浓密度,有时候需要强制定位hash顺序,指定构建表,有时候需要跟踪是不是会被交换到虚拟文件上,这就需要跟踪救助算法。

1 —使用并行以及指定广播表优化hash连接

小表a 和大表b做hash如何优化

create table a as select * from all_objects where object_id<101;

create table b as select * from all_objects ;

 

默认执行计划

explain plan for select * from a ,b where a.object_id=b.object_id;

 

select * from table(dbms_xplan.display);

 

开并行

explain plan for select /*+ parallel(2) */ * from a ,b where a.object_id=b.object_id;

 

 

select * from table(dbms_xplan.display);

 

指定hash连接,开并行,小表向大表广播

explain plan for select /*+ parallel(2) use_hash(a ,b)  pq_distribute(a none,broadcast)  */ * from a ,b where a.object_id=b.object_id;

 

 

select * from table(dbms_xplan.display);

 

2 hash 大表a 和大表 b  连接

使用hash-hash的方式,将两个大表根据并行度分别hash,再做hash连接

 

explain plan for select /*+ parallel(2) use_hash(a ,b)  pq_distribute(b hash,hash)  */ * from a ,b where a.object_id=b.object_id;

 

select * from table(dbms_xplan.display);

 

 

alter session set statistics_level=all;

set line 200 pagesize 200;

 select /*+ parallel(2) use_hash(a ,b)  pq_distribute(b hash,hash)  */ * from a ,b where a.object_id=b.object_id;

 

 

 

select * from table(dbms_xplan.display_cursor(null,null,'allstats last'));

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
相关信息推荐