はじめてのIndexOnly

ソート処理を省いてくれます。


<例題>
t_uriテーブル:約14万件
このテーブルにdennum, recnumの複合インデックスが貼られている場合

●IndexOnlyでクエリー
select dennum, recnum from t_uri order by dennum, recnum 

EXPLAIN実行結果>
 SELECT STATEMENT    Cost=933
  2.1 INDEX FULL SCAN PK_T_URI UNIQUE 

注)IndexOnlyはORDER BY句を使わないのが基本。使っても別にイイジャン。Sortしてないから。大嘘。ORDER BY書くとCostが増えてしまいます。
↓ORDER BY書かなかったとき
SELECT dennum, recnum FROM t_uri

EXPLAIN実行結果>
 SELECT STATEMENT    Cost=142
  2.1 INDEX FAST FULL SCAN PK_T_URI UNIQUE 

●ORDER BYでクエリー
select dennum, recnum  from t_uri order by recnum, dennum 

EXPLAIN実行結果>
 SELECT STATEMENT    Cost=1096
  2.1 SORT ORDER BY   
    3.1 INDEX FAST FULL SCAN PK_T_URI UNIQUE 



<例題2>
テーブルJOINで。
t_uriのインデックスは「dennum, reccode」
m_nohのインデックスは「tokcode, nohcode, takkbn」

●IndexOnlyでクエリー
SELECT
    a.dennum,
    a.recnum,
    b.tokcode,
    b.nohcode,
    b.takkbn
FROM
    t_uri a,
    m_noh b
WHERE
    a.tokcode = b.tokcode AND
    a.nohcode = b.nohcode 

EXPLAIN実行結果>
 SELECT STATEMENT    Cost=1832
  2.1 HASH JOIN    
    3.1 INDEX FAST FULL SCAN IDX_M_NOH2 NON-UNIQUE 
    3.2 TABLE ACCESS FULL T_URI  

●ORDER BYでクエリー
SELECT
    a.dennum,
    a.recnum,
    b.tokcode,
    b.nohcode,
    b.takkbn
FROM
    t_uri a, m_noh b
WHERE
    a.tokcode = b.tokcode AND
    a.nohcode = b.nohcode 
ORDER BY
    a.dennum,
    a.recnum,
    b.tokcode,
    b.nohcode,
    b.takkbn

EXPLAIN実行結果>
 SELECT STATEMENT    Cost=4407
  2.1 SORT ORDER BY   
    3.1 HASH JOIN    
      4.1 INDEX FAST FULL SCAN IDX_M_NOH2 NON-UNIQUE 
      4.2 TABLE ACCESS FULL T_URI  

得られる結果はいっしょ。