Tips!
 

■対象バージョン : Adaptive Server Anywhere 9.0以降

■対象OS : Windows 95/98/ME/NT/2000/XP

ST0411044

特殊なインデックスの作成

Tips!


WHERE句の左辺カラムに対して関数や演算子を使うと、そのカラムのインデックスは使用されません。
適切なインデックスが使用できないと、オプティマイザはテーブル・スキャンを行いますが、テーブルのサイズが比較的大きい場合、これには多くのコストがかかってしまいます。
このような場合、特殊なインデックスを作成することで、この問題を回避することができます。

例として、asademo.dbを使用した場合について説明します。
従業員テーブル(employee)から11月生まれの人を探す為に、次のような SQLを実行します。
※カラム(birth_date)にはインデックスがあるものとします。
-------------------------------------------------------------
SELECT * FROM "DBA"."employee" WHERE MONTH(birth_date) = 11
-------------------------------------------------------------
このときプランを確認すると、テーブル・スキャンが行われています。

このテーブルに、カラム(birth_date)の月の値のインデックスを作成します。
-------------------------------------------------------------
CREATE INDEX ix_birth_month
ON employee (
  MONTH( birth_date )
  AS birth_month )
-------------------------------------------------------------

再び上記のSQLを実行します。
-------------------------------------------------------------
SELECT * FROM "DBA"."employee" WHERE MONTH(birth_date) = 11
-------------------------------------------------------------
プランを確認すると、インデックス(ix_birth_month)が使用されています。

なお、このインデックスを作成すると、計算カラム(birth_month)がテーブルに追加されることに注意してください。
※SELECT * 〜で全カラムを選択した場合に(birth_month)というカラムが増えています。

インデックスの詳細につきましては以下をご参照下さい。

ASA SQL リファレンス・マニュアル
 SQL 文
  CREATE INDEX 文


BACK:Tips! トップページ
 
 
Copyright 2005-2010 iAnywhere Solutions K.K.