by Hayato Matsuura.

関数


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から使用可能です。

目次

  1. 大文字・小文字を区別する 検索 - UPPERLOWER

  2. ユーザ定義 関数 - 関数インデックスの制限

  3. インデックスの作り過ぎ - 冗長性の排除法

前へ次へ

著者について

Markus Winandの写真

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

彼の本

カバー『SQLパフォーマンス詳解』

核心をわかりやすく 解説。

Markusから購入します
(送料無料+PDF)

Amazonで購入
(印刷版のみ)

“Use The Index, Luke!” by Markus Winand is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
法律上の通知 | 接触 | 無保証 | 商標 | Privacy | CC-BY-NC-ND 3.0 license