暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 获取记录需要时间

askTom 2018-02-19
240

问题描述

嗨,团队,

我面临着sql查询的一个问题,它在1秒内执行,但数据被提取到客户端需要时间。

我在MV中执行查询具有一定条件,并且它正在响应7000记录。根据v $ sql,查询总共需要0.4秒的时间才能执行,但是要获取大约7k的数据,则需要7秒才能完成。开发人员团队正在使用java api调用查询,并进一步将结果设置为json。

查询
SELECT 
 a,b,c,d,e,f
FROM    Mat_View
WHERE a = 'ABC'
    AND   z = 'XYZ'
    AND   c like  'PQR'
    AND   mv_type IN ( '202', '302', '502' );

Execution Plan
----------------------------------------------------------
Plan hash value: 3009331739

--------------------------------------------------------------------------------------------------------
| Id  | Operation                       | Name                 | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                |                      |    10 |  1580 |  5498   (1)| 00:01:06 |
|   1 |  INLIST ITERATOR                |                      |       |       |            |          |
|*  2 |   MAT_VIEW ACCESS BY INDEX ROWID| MV                   |   235 | 37130 |  5498   (1)| 00:01:06 |
|*  3 |    INDEX RANGE SCAN             | MV_TYPE_IDX          |   208K|       |    14   (8)| 00:00:01 |
--------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("A"='ABC' AND "Z"='XYZ' AND "C"='PRQ')
   3 - access("MV_TYPE"='202' OR "MV_TYPE"='302' OR "MV_TYPE"='502')


Statistics
----------------------------------------------------------
          4  recursive calls
          0  db block gets
      13598  consistent gets
          0  physical reads
          0  redo size
     198944  bytes sent via SQL*Net to client
        375  bytes received via SQL*Net from client
          3  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
       6800  rows processed


要在sql * pls中检查相同的内容,我将默认的arraysize设置为100,提取所有记录需要40秒,并通过将arraysize更改为最大5000,它将在8秒内提取数据。

我们如何通过修改任何查询或设置任何参数来减少获取客户端的时间。


专家解答

如果增加arraysize在SQL * Plus中效果很好,请在客户端中尝试类似!

您可以在JDBC中检查并设置此语句。getFetchSize和语句。setFetchSize
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论