結合インデックスせんりゃく

こんなテーブルがありましたとさ。

CREATE TABLE TBL
(
    COL1                           VARCHAR2(1),
    COL2                           NUMBER(5,0)
)


そして、このテーブルを検索するこのSQLを速くしたいと。

SELECT * FROM TBL 
WHERE col1 = 'A'
AND col2 BETWEEN 1 AND 333333


TBLのレコード総数は100マン件です。
TBL.COL1にはアルファベットの文字が入っていてカーディナリティが低い。
TBL.COL2には数値がランダムに入っていてカーディナリティが高い。


TBL.COL1とTBL.COL2のそれぞれにインデックスを作るより、
COL1とCOL2の結合インデックスを作るほうが有利と思われます。


で、結合インデックスの順序をどうするか。
COL1・COL2とCOL2・COL1のどっちが有利か。


直感的にはカーディナリティが高いCOL2を先にした方がよいように思えます。


だが、待て!


結合インデックスの先の列の条件が『=』であるものがもっとも有利なのだ!
詳細な説明は下記の本に任せます(おぃ
実際試してみたら、検索レコードが倍ほど違ってた。


日付とかをBETWEENで検索することって多いわけで。


データベースパフォーマンスアップの教科書 基本原理編
データベースパフォーマンスアップの教科書 基本原理編エンコアコンサルティング

翔泳社 2006-07-07
売り上げランキング : 5905


Amazonで詳しく見る
by G-Tools