设置多块读取来提高查询速度
===================================
在全表扫描的时候可以实现多块读取从而提速
多块读取是由参数db_file_multiblock_read_count来确定的
通过合理修改该参数能达到提高查询效率的目的
多块读取是由参数db_file_multiblock_read_count来确定的
通过合理修改该参数能达到提高查询效率的目的
检查数据库版本
SQL> select * from v$version
2 ;
SQL> select * from v$version
2 ;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
查看参数值
SQL> show parameter db_file_multiblock
SQL> show parameter db_file_multiblock
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_multiblock_read_count integer 4
------------------------------------ ----------- ------------------------------
db_file_multiblock_read_count integer 4
创建测试表
SQL> create table an (id int) tablespace an;
表已创建。
准备数据
SQL> begin
2 for i in 1..1000000 loop
3 insert into an values(i);
4 end loop;
5 commit;
6 end;
7 /
PL/SQL 过程已成功完成。
查询
SQL> set timing on
SQL> select count(*) from an;
COUNT(*)
----------
1000000
----------
1000000
已用时间: 00: 00: 01.59
清除buffer_cache和library cache
SQL> alter system flush buffer_cache;
SQL> alter system flush buffer_cache;
系统已更改。
已用时间: 00: 00: 00.89
SQL> alter system flush shared_pool;
SQL> alter system flush shared_pool;
系统已更改。
已用时间: 00: 00: 00.01
修改多块读取参数
SQL> alter system set db_file_multiblock_read_count=32;
SQL> alter system set db_file_multiblock_read_count=32;
系统已更改。
已用时间: 00: 00: 00.20
确认参数值
SQL> show parameter db_file_multiblock_read_count
SQL> show parameter db_file_multiblock_read_count
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_file_multiblock_read_count integer 32
------------------------------------ ----------- ------------------------------
db_file_multiblock_read_count integer 32
重新执行查询
SQL> select count(*) from an;
SQL> select count(*) from an;
COUNT(*)
----------
1000000
----------
1000000
已用时间: 00: 00: 00.64
查询时间由原来的1.59秒缩短到了0.64秒
当返回数据占表数据总量的比例比较高的时候,采用全表扫描,由于可以实现多块读取,查询的速度要比索引扫描要快
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/13177610/viewspace-700942/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/13177610/viewspace-700942/