有个不大的表 数据量大于百万级别 这是类似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 = B1
ORDER BYA.DISP_DATE DESC,
A.CREATE_TIME DESC)
WHERE ROWNUM