- PR -

【ファンクション索引とは?】

1
投稿者投稿内容
fight
ベテラン
会議室デビュー日: 2005/09/25
投稿数: 74
投稿日時: 2006-11-17 21:39
文献などを読んだのですが、oracleのファンクション索引の意味がよくわかりません。
噛み砕いて説明していただけるとありがたいです。
ご存知の方がいらっしゃいましたら教えていただけるとありがたいです。よろしくお願いいたします。
今川 美保(夏椰)
ぬし
会議室デビュー日: 2004/06/10
投稿数: 363
お住まい・勤務地: 神奈川県茅ヶ崎市
投稿日時: 2006-11-19 01:23
逆に教えてください。

ファンクション索引について何かしらの解説を読まれて
"意味がよくわからない"
となったと思うんですが、何に疑問をもたれたんでしょうか?


私が今、言えることは
普通のINDEXを作るSQLとしては
コード:
  CREATE INDEX TESTIDX ON TEST1(d) ;


などとして
D列(仮にDATE型としてください)に対してINDEXを作成する
→D列の格納されている値とその格納場所を把握する。

という作業になりますが、このD列に対して以下のようにTO_CHAR関数(ファンクション)をつけた結果に対しINDEXを作成することがファンクション索引の利点だと思っています。
コード:
  CREATE INDEX TESTIDX2 ON TEST1(TO_CHAR(d,'yyyymmdd')) ;



上記2種のINDEXがある状態で
コード:
SELECT * FROM TEST1 WHERE TO_CHAR(d,'yyyymmdd') = '20060101' ;


とやった場合、TESTIDXは使用されず、TESTIDX2が使用されます。

すでに変換した値に対し、INDEXが作成されているので、
そのインデクスの内容をサーチし、該当するデータを探しだせば早いと思いませんか?

もし、TESTIDX2がない状態(TESTIDXだけの状態)で上記SQLを発行すると
TESTIDXが使用されると思われるかもしれませんが、
TESTIDXには変換する前の値が格納されているので、合致せず使用してくれないんです。


なので、WHERE句なのであらかじめ関数を用いて値を変換し検索条件とすることが
わかっている場合、
ファンクションの結果を持ったINDEX = ファンクション索引
を作成しておくことで、検索時間の向上を図ることが出来ます。


・・・とこの説明、あまりうまくはないかと思いますが、
何かの糸口になれば幸いです。
_________________
夏椰 @ わんくま同盟
夏椰の庵
Microsoft MVP for Windows Server System - SQL Server ( Jul 2006 - Jun 2008 )
fight
ベテラン
会議室デビュー日: 2005/09/25
投稿数: 74
投稿日時: 2006-11-23 13:12
ものすごく分かりやすい解説でした。
ありがとうございます。理解できました。
1

スキルアップ/キャリアアップ(JOB@IT)