db_file_multiblock 設定多塊讀取來提高查詢速度

安佰勝發表於2011-06-29

設定多塊讀取來提高查詢速度
===================================
在全表掃描的時候可以實現多塊讀取從而提速
多塊讀取是由引數db_file_multiblock_read_count來確定的
通過合理修改該引數能達到提高查詢效率的目的
檢查資料庫版本
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                                         
檢視引數值
SQL> show parameter db_file_multiblock
NAME                                 TYPE        VALUE                         
------------------------------------ ----------- ------------------------------
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                                                                     
已用時間:  00: 00: 01.59
清除buffer_cache和library cache
SQL> alter system flush buffer_cache;
系統已更改。
已用時間:  00: 00: 00.89
SQL> alter system flush shared_pool;
系統已更改。
已用時間:  00: 00: 00.01
修改多塊讀取引數
SQL> alter system set db_file_multiblock_read_count=32;
系統已更改。
已用時間:  00: 00: 00.20
確認引數值
SQL> show parameter db_file_multiblock_read_count
NAME                                 TYPE        VALUE                         
------------------------------------ ----------- ------------------------------
db_file_multiblock_read_count        integer     32                            
重新執行查詢
SQL> select count(*) from an;
  COUNT(*)                                                                     
----------                                                                     
   1000000                                                                     
已用時間:  00: 00: 00.64

查詢時間由原來的1.59秒縮短到了0.64秒
當返回資料佔表資料總量的比例比較高的時候,採用全表掃描,由於可以實現多塊讀取,查詢的速度要比索引掃描要快

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/13177610/viewspace-700942/,如需轉載,請註明出處,否則將追究法律責任。

相關文章