関数


LAST_NAMEに対するインデックスで、明らかな パフォーマンス向上ができました。しかし、データベースに保存されている 文字と、大文字小文字まで合わせて検索しなければなりません。この節では、 パフォーマンスを低下させずにこの制約を取り除く方法について説明して いきます。

DB2

DB2では、関数インデックスはzOS 上では使用可能ですが、他の システム上では使用できません。

代わりとしては、関数や式の結果を入れる列をテーブルに作る 方法があります。その列は、その時に応じてトリガあるいは アプリケーションによりメンテナンスする必要があります。そして、その 列にインデックスを作成し、where句では式を通さずに 新しい列を使います。

MySQL

MySQLはデフォルトでは大文字小文字の違いを無視しますが、列レベルで変更することもできます。 MySQL 5.7からは、生成列 にインデックスを作ることもできるようになりました。

古いバージョンを使う場合の代替策として、 関数や式の結果を入れる列をテーブルに作る方法があります。 その列は、その時に応じてトリガあるいは アプリケーションによりメンテナンスする必要があります。そして、その 列にインデックスを作成し、where句では式を通さずに 新しい列を使います。

Oracle

Oracleは、リリース8iから関数 インデックスをサポートしています。バーチャルカラムも11gから使用可能です。

PostgreSQL

PostgreSQLは、式 インデックスをリリース7.4(一部7.2)から完全にサポートして います。

SQL Server

SQL Serverは、計算列 が2000から使用可能です。

Photo of Markus Winand
Markus Winand氏は、開発者がSQLパフォーマンスを改善するお手伝いをしています。 彼は、SQL Performance Explainedの 著者でもあり、出張トレーニングhttp://winand.at/での リモート講義も 行っています。