結合インデックスせんりゃく
こんなテーブルがありましたとさ。
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 |