by Hayato Matsuura.

インデックスの作り過ぎ


関数インデックスの考え方を初めて知ると、あらゆるものに インデックスを作成したくなってしまうかもしれません。しかし、 それは本当に最後の手段です。全てのインデックスは、継続的な メンテナンスが必要になるからです。関数インデックスは、冗長な インデックスを作ってしまいがちという点で、特に 厄介です。

ここまで取り上げたような大文字 小文字を区別しない検索は、以下のようにLOWER関数を 使っても実装できます。

SELECT first_name, last_name, phone_number
  FROM employees
 WHERE LOWER(last_name) = LOWER('winand')

1つのインデックスで、どちらのタイプの大文字小文字を区別しない 検索もサポートすることはできませんので、もちろん LOWER(last_name)にもう1つインデックスを作ることもできます。 しかし、insert文やupdate文、 delete文が実行されるたびに、どちらのインデックスも 更新しなくてはなりません(第8章, 「データの変更を参照)。1つのインデックスで 間に合わせるには、アプリケーション全体で、一貫して同じ関数を使う 必要があります。

ヒント

1つのインデックスを複数のクエリで使えるように、 アクセスパスを統一しましょう。

警告

参照ORMツールは、開発者が知らないうちにUPPERや LOWERを使うことがあります。例えばHibernateは、 大文字小文字を区別しない検索に対して、暗黙的にLOWERを 付加します。

ヒント

いつも最適な情報がインデックスに入るように、なるべくオリジナルの データにインデックスを作成するように常に心がけましょう。

著者について

Markus Winandの写真

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

“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