TECHNOLOGY

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 文