Oracle 11g结果集缓存限制

WBOY
풀어 주다: 2016-06-07 15:57:31
원래의
1072명이 탐색했습니다.

有个不大的表 数据量大于百万级别 这是类似IP地址范围查找. 表的查询量很大.数实时生成,有时会被更新该表上的索引 主键和表 都被

有个不大的表 数据量大于百万级别 这是类似IP地址范围查找. 表的查询量很大.数实时生成,有时会被更新该表上的索引 主键和表 都被我KEEP进内存了。
查询速度 基本保持在50-30毫秒之间.
该表的数据 一天要查500万次以上.同时被重复查询的次数也蛮多子.

鉴于这个原因 所以向开发人员提出 在SQL 增加提示 /*+ result_cache */

结论是 结果缓存通过表的依赖而失效,也就是说相应表发生了数据变化那么就重新从表获取.相比时间 比普通45毫秒 高很多 达到945毫秒. 难道它不晓得从内存中获取吗? 还是觉得表数据有变化,直接从硬盘上读取才是真!

declare

B1 VARCHAR2(20);

B2 NUMBER;

ORG NUMBER(10);

S  TIMESTAMP;

E  TIMESTAMP;

R  TIMESTAMP;

begin

  B2:=12;

  B1:=668239581895;

FOR I IN 1..100 LOOP

 

S:=SYSTIMESTAMP;


SELECT  /*+ result_cache */ USE_IP into  IP

  FROM (SELECT A.USE_IP

              A.IP_TYPE

          FROM BACK_IP A

        WHEREA.IP_TYPE IN (3, 5, 9)

          ANDIP_LEGN = B2

          ANDA.START_IP

          ANDA.END_IP >= B1

        ORDER BYA.DISP_DATE DESC,

                  A.CREATE_TIME  DESC)

WHERE ROWNUM

E:=SYSTIMESTAMP;


DBMS_OUTPUT.PUT_LINE(TO_CHAR(E-S));

DBMS_LOCK.SLEEP(10);

END LOOP;

END ;

测试结果 不很理想 波动性太大了.

+00000000000:00:00.090374000

+00000000000:00:00.102860000

+00000000000:00:00.000237000

+00000000000:00:00.000139000

+00000000000:00:00.000135000

+00000000000:00:00.000163000

+00000000000:00:00.000170000

+00000000000:00:00.000206000

+00000000000:00:00.000173000

+000000000 00:00:00.000171000

+00000000000:00:00.000170000

+00000000000:00:00.000139000

+00000000000:00:00.000267000

+00000000000:00:00.000171000

+00000000000:00:00.000160000

+00000000000:00:00.000180000

+00000000000:00:00.000161000

+00000000000:00:00.000183000

+00000000000:00:00.000182000

+00000000000:00:00.000139000

+00000000000:00:00.000147000


+00000000000:00:00.000160000

+00000000000:00:00.000212000

+00000000000:00:00.000353000


+00000000000:00:00.094454000

本文永久更新链接地址

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿