はじめての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
得られる結果はいっしょ。