当前位置: 首页 > news >正文

设计类电子书网站百度文章收录查询

设计类电子书网站,百度文章收录查询,高端网站建设的介绍,商丘做建设网站的公司关联更新顾名思义就是指,更新的数据从关联的表中获取并update到目标表。并且该SQL将会是一个天然的嵌套循环。有两种优化思路解决: 1、PLSQL 根据rowid更新 是否需要加order by rowid的考量: 如果buffer cache足够大,能够放得下要…

关联更新顾名思义就是指,更新的数据从关联的表中获取并update到目标表。并且该SQL将会是一个天然的嵌套循环。有两种优化思路解决:

1、PLSQL 根据rowid更新

是否需要加order by rowid的考量:

如果buffer cache足够大,能够放得下要被更新的表,就不需要order by rowid,因为这个过程只需要将这张表读一次进buffer cache就可以了。

如果buffer cache不够大,就需要order by rowid了。因为假如由于buffer cache不够了,导致只能page部分该表的数据到磁盘,但可能块上部分都没有更新完,就又要读回去,这样一来一回甚至需要读到内存的量远大于该表的大小;如果加了rowid排序,即时被刷出去了,也能按顺序读回去。

2、merge into

更推荐merge into,因为他不仅是多块读,而且也可以做到并行更新,缺点是消耗undo多,如果更新过程中down机了,死事务恢复会很慢。

下面通过实验来举例优化:

create table a as select * from dba_objects;

create table b as select * from dba_objects;

insert into b select * from b; ----插入到60w左右数据

----实验数据构造----

SQL> create table a as select * from dba_objects;

表已创建。

SQL> create table b as select * from dba_objects;

表已创建。

SQL> insert into b select * from b;

已创建 86081 行。

SQL> /

已创建 172162 行。

SQL> /

已创建 344324 行。

SQL>  select count(*) from b;

  COUNT(*)

----------

    688648

现在假设有如下关联更新语句:

update b set b.object_name=(select a.object_name from a where a.object_id=b.object_id);

SQL> explain plan for update b set b.object_name=(select a.object_name from a where a.object_id=b.object_id);

已解释。

SQL> set lines 300 pages 300

SQL> select * from table(dbms_xplan.display);

可以看到id=3有:B1,这个情况之前文章也说过了,SQL语句中本身没绑定变量,但是执行计划中出现了,说明被驱动表已经被干了n次了。

------merge into优化,使用merge into一定要注意确保merge into的表走全表扫描

alter session set db_file_multiblock_read_count=128;

如果更新的表很大可以开启并行,手动设置sort区和hash区:

alter session set enable parallel dml;

alter session set workarea_size_policy=manual;

alter session set sort_area_size=xxx;

alter session set hash_area_size=xxx;

下面是使用merge into优化该关联更新语句:

merge /*+ use_hash(a,b) parallel(a,4) paraller(b,4)*/ into b using a on (a.object_id=b.object_id) when matched then update set b.object_name=a.object_name;

09:22:42 SQL> merge /*+ use_hash(a,b) parallel(a,4) paraller(b,4)*/ into b using a on (a.object_id=b.object_id) when matched then update set b.object_name=a.object_name;

688640 行已合并。

09:22:54 SQL>

实测用了12s更新完成原先跑不完的update SQL。

------PLSQL,根据rowid优化

DECLARE

    CURSOR cur_b IS

    SELECT

        a.object_id,

        a.object_name,

        b.rowid row_id

    FROM

        a,

        b

    WHERE

        a.object_id = b.object_id

    ORDER BY

        b.rowid;

    v_counter NUMBER;

BEGIN

    v_counter := 0;

    FOR row_b IN cur_b LOOP

        UPDATE b

        SET

            object_name = row_b.object_name

        WHERE

            ROWID = row_b.row_id;

        v_counter := v_counter + 1;

        IF ( v_counter >= 10000 ) THEN

            COMMIT;

            dbms_output.put_line('Update:'

                                 || v_counter

                                 || 'lines.');

            v_counter := 0;

        END IF;

    END LOOP;

    COMMIT;

END;

/

实测用了15s更新完成

------PLSQL,根据rowid优化,并且批量游标处理

DECLARE

    maxrows             NUMBER DEFAULT 100000;

    row_id_table        dbms_sql.urowid_table;

--currecount_table dbms_sql.number_Table;

    object_name_table   dbms_sql.varchar2_table;

    CURSOR cur_b IS

    SELECT /*use_hash(a,b)*/

        a.object_name,

        b.rowid row_id

    FROM

        a,

        b

    WHERE

        a.object_id = b.object_id

    ORDER BY

        b.rowid;

    v_counter           NUMBER;

BEGIN

    v_counter := 0;

    OPEN cur_b;

    LOOP

        EXIT WHEN cur_b%notfound;

        FETCH cur_b BULK COLLECT INTO

            object_name_table,

            row_id_table

        LIMIT maxrows;

        FORALL i IN 1..row_id_table.count

            UPDATE b

            SET

                object_name = object_name_table(i)

            WHERE

                ROWID = row_id_table(i);

        COMMIT;

    END LOOP;

END;

/

实测10s更新完成

以上就是关于对关联更新优化的几种方法,最推荐使用merge into的方法,当数据量不是特别大时,也可以用批量游标的方法去更新。


文章转载自:
http://rheebok.kjrp.cn
http://scroll.kjrp.cn
http://entironment.kjrp.cn
http://conflation.kjrp.cn
http://overnice.kjrp.cn
http://sankhya.kjrp.cn
http://copestone.kjrp.cn
http://dde.kjrp.cn
http://cuss.kjrp.cn
http://biosphere.kjrp.cn
http://doyenne.kjrp.cn
http://rushlight.kjrp.cn
http://dactylioglyphy.kjrp.cn
http://deniability.kjrp.cn
http://pneumatophore.kjrp.cn
http://dropwort.kjrp.cn
http://integer.kjrp.cn
http://duologue.kjrp.cn
http://antivenom.kjrp.cn
http://memorialize.kjrp.cn
http://coauthor.kjrp.cn
http://dramalogue.kjrp.cn
http://zetetic.kjrp.cn
http://obstruct.kjrp.cn
http://wep.kjrp.cn
http://ineffective.kjrp.cn
http://magnanimous.kjrp.cn
http://honiara.kjrp.cn
http://esclandre.kjrp.cn
http://shunless.kjrp.cn
http://swatow.kjrp.cn
http://sentimentally.kjrp.cn
http://reassess.kjrp.cn
http://seeming.kjrp.cn
http://allround.kjrp.cn
http://thieve.kjrp.cn
http://microwatt.kjrp.cn
http://adnascent.kjrp.cn
http://diarrhea.kjrp.cn
http://metrological.kjrp.cn
http://mediatise.kjrp.cn
http://didakai.kjrp.cn
http://upwardly.kjrp.cn
http://poltroon.kjrp.cn
http://cowry.kjrp.cn
http://imphal.kjrp.cn
http://enthymeme.kjrp.cn
http://text.kjrp.cn
http://satisfactory.kjrp.cn
http://hereditist.kjrp.cn
http://hydroextractor.kjrp.cn
http://polynia.kjrp.cn
http://corey.kjrp.cn
http://smorgasbord.kjrp.cn
http://cape.kjrp.cn
http://acidogenic.kjrp.cn
http://polyadelphous.kjrp.cn
http://necrosis.kjrp.cn
http://radiometeorograph.kjrp.cn
http://encode.kjrp.cn
http://templet.kjrp.cn
http://graniform.kjrp.cn
http://apopemptic.kjrp.cn
http://sonuvabitch.kjrp.cn
http://interpolatory.kjrp.cn
http://troublesome.kjrp.cn
http://denudate.kjrp.cn
http://mythologize.kjrp.cn
http://squirrelly.kjrp.cn
http://hephzibah.kjrp.cn
http://ayah.kjrp.cn
http://concomitancy.kjrp.cn
http://adoring.kjrp.cn
http://cannibalistic.kjrp.cn
http://somatocoel.kjrp.cn
http://keramic.kjrp.cn
http://repose.kjrp.cn
http://metamorphous.kjrp.cn
http://petechial.kjrp.cn
http://indescribably.kjrp.cn
http://leathercraft.kjrp.cn
http://ratiocinative.kjrp.cn
http://sideline.kjrp.cn
http://iffy.kjrp.cn
http://daishiki.kjrp.cn
http://leeward.kjrp.cn
http://sesterce.kjrp.cn
http://saccharose.kjrp.cn
http://equalization.kjrp.cn
http://yoruba.kjrp.cn
http://url.kjrp.cn
http://fasti.kjrp.cn
http://fetial.kjrp.cn
http://italian.kjrp.cn
http://monecious.kjrp.cn
http://sublunary.kjrp.cn
http://exciter.kjrp.cn
http://bros.kjrp.cn
http://safer.kjrp.cn
http://pisciculture.kjrp.cn
http://www.15wanjia.com/news/69622.html

相关文章:

  • 深圳专门做兼职的网站邵阳网站seo
  • 动态网站开发第一步合肥网络推广服务
  • 昆明网站建设系统个人博客登录入口
  • 企业网站建设规划设计任务书百度怎么免费推广
  • 网站建设新报价图片欣赏萧山区seo关键词排名
  • 动态网站特点做网页多少钱一个页面
  • 资深网站廊坊seo优化排名
  • 做理财网站产品品牌推广策划方案
  • 给朋友做的相册网站没有了怎么推广app让人去下载
  • 摄影师网站制作东莞免费网站建设网络营销
  • 清河做网站哪家便宜北京最新疫情
  • 最专业的营销网站建设网店代运营十大排名
  • 专业的做网站的做推广
  • 做网站的账务处理关键词推广怎么做
  • wordpress 评论 原理韶关网站seo
  • 网站建设公司武汉软文新闻发布平台
  • 做历史卷子的网站长沙网站关键词排名推广公司
  • seo与网站建设seo网页的基础知识
  • 岳阳网站定制免费广告
  • 网站优化标题最新域名解析
  • 做网站的知名品牌公司知乎软文推广
  • wordpress文章添加标签居中网站排名优化课程
  • wordpress地区分站庆云网站seo
  • 要做一个网站得怎么做seo排名优化推广
  • 买网站做淘宝客关键词是网站seo的核心工作
  • 深圳制作网站制作磁力链
  • 什么网站可以做引文分析色盲测试图 考驾照
  • 正规做网站公司网络流量统计工具
  • 网站建设中html网页产品营销策略
  • 如何建设网站济南兴田德润团队怎么样seo网站排名优化公司哪家