zoukankan      html  css  js  c++  java
  • 返回10%的数据一定就能走索引?

    <pre name="code" class="sql">select count(*) from dwf.f_agt_business_contract_h
    --1934179
    
    select count(*) from dwf.f_agt_business_contract_h  t where t.end_dt=date'2999-12-31'
    --256314
    
    select (256314/1934179)*100 from dual;
    
    很多人会说这个返回数据比列13.25%,应该走索引啊!
    
    查看f_agt_business_contract_h的块数:
    
    SQL> select owner,table_name,blocks from dba_tables where table_name=upper('f_agt_business_contract_h');
    
    OWNER			       TABLE_NAME			  BLOCKS
    ------------------------------ ------------------------------ ----------
    DWF			       F_AGT_BUSINESS_CONTRACT_H	  202806
    
    BLOCKS*	NUMBER	
    Number of used data blocks in the table
    EMPTY_BLOCKS*	NUMBER	
    Number of empty (never used) data blocks in the table
    
    用show_tablespace查看;
    Total Blocks............................203392
    Total Bytes.............................1666187264
    Unused Blocks...........................0
    Unused Bytes............................0
    Last Used Ext FileId....................51
    Last Used Ext BlockId...................2437120
    Last Used Block.........................8192
    
    SQL> select count(distinct dbms_rowid.rowid_block_number(rowid))from  F_AGT_BUSINESS_CONTRACT_H	;
    
    COUNT(DISTINCTDBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID))
    ---------------------------------------------------
    					     156581
    
    
    可以看到F_AGT_BUSINESS_CONTRACT_H 表一共有1934179行,存储在156581个block
    
    
    查看select count(distinct dbms_rowid.rowid_block_number(rowid))from  F_AGT_BUSINESS_CONTRACT_H where end_dt=date'2999-12-31';
    
    
    SQL> select count(distinct dbms_rowid.rowid_block_number(rowid))from  F_AGT_BUSINESS_CONTRACT_H where end_dt=date'2999-12-31';
    
    COUNT(DISTINCTDBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID))
    ---------------------------------------------------
    					      43398
    
    加入访问end_dt=date'2999-12-31'走索引,那么会返回256314条记录,产生256314个rowid,去43398个数据块了找,都是单块读
    
    光这里就需要43398个单块读,加上访问索引的成本。
    
    而全表扫描: 只需要202806/128=1584个I/O由于一次单块读和多块读成本差不多,明显走全表扫描效率高。
    
    
    
                                        
    
  • 相关阅读:
    意外发现,VC断点可加在构造函数的左括号上
    C++中的INL
    如何用DELPHI编程修改外部EXE文件的版本信
    j2ee面试宝典翻译(1)
    华为总裁任正非:允许小部分力量去颠覆性创新
    QStringList与QString互转
    QTreeView只显示指定驱动器及其目录,隐藏所有兄弟节点
    Protected Functions 是理解OO的难点和关键
    技术人员的创业陷阱:我能,但不管用户在哪里!
    大陆的创业环境和风气的确产生巨大变化,大众创业“蔚然成风”
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13352202.html
Copyright © 2011-2022 走看看