Home >Database >Mysql Tutorial >通过设置SQLPLUS ARRAYSIZE(行预取)加快SQL返回速度

通过设置SQLPLUS ARRAYSIZE(行预取)加快SQL返回速度

WBOY
WBOYOriginal
2016-06-07 17:02:29947browse

有时候你可能会用SQLPLUS spool 表的数据,那么怎么加快spool速度呢?SQLPLUS中有个行预取的选项SQLPLUS中 arraysize默认为15 SQ

有时候你可能会用SQLPLUS spool 表的数据,那么怎么加快spool速度呢?SQLPLUS中有个行预取的选项

SQLPLUS中 arraysize默认为15 

SQL> show arraysize
arraysize 15

它表示从Oracle服务器端一次只传递15行记录到客户端(SQLPLUS),当然了JDBC,WEBLOGIC也有行预取,,具体自己Google

举个例子:

SQL> select * from test where owner='ADWU_OPTIMA_AP11';

773 rows selected.

Elapsed: 00:00:30.95

Execution Plan
----------------------------------------------------------
Plan hash value: 217508114

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |   593 |   134K|   882   (3)| 00:00:03 |
|*  1 |  TABLE ACCESS FULL| TEST |   593 |   134K|   882   (3)| 00:00:03 |
--------------------------------------------------------------------------

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

   1 - filter("OWNER"='ADWU_OPTIMA_AP11')


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
       2976  consistent gets
          0  physical reads
          0  redo size
      50484  bytes sent via SQL*Net to client
        597  bytes received via SQL*Net from client
         53  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
        773  rows processed

SQL> set arraysize 5000
SQL> select * from test where owner='ADWU_OPTIMA_AP11';

773 rows selected.

Elapsed: 00:00:16.06

Execution Plan
----------------------------------------------------------
Plan hash value: 217508114

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |   593 |   134K|   882   (3)| 00:00:03 |
|*  1 |  TABLE ACCESS FULL| TEST |   593 |   134K|   882   (3)| 00:00:03 |
--------------------------------------------------------------------------

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

   1 - filter("OWNER"='ADWU_OPTIMA_AP11')


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
       2927  consistent gets
          0  physical reads
          0  redo size
      47800  bytes sent via SQL*Net to client
        241  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
        773  rows processed

当设置 arraysize 之后,SQLPLUS 客户端与数据库Server端交互次数明显减少,这就是为什么返回773行数据第二次比第一次快1倍了,同时也可以看到,第二次逻辑读比第一次低了,那说明设置行预取会影响逻辑读。

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn