by Hayato Matsuura.

インデックスの作り過ぎ


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

協力してください

この記事が気に入ったら、私の書いた本「SQLパフォーマンス詳解」や私によるトレーニングもきっと気にいるはず。

ここまで取り上げたような大文字 小文字を区別しない検索は、以下のように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章8, 「データの変更を参照)。1つのインデックスで 間に合わせるには、アプリケーション全体で、一貫して同じ関数を使う必要があります。

ヒント

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

参照

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

ヒント

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

著者について

Markus Winandの写真

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

彼の本

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

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

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

Amazonで購入
(印刷版のみ)

Do not use offset for pagination

Learn why

Visit my sibling!A lot changed since SQL-92!

Use The Index, Luke のカップは

ステッカー、コースター、本、コーヒーマグ。 学習に必要なものすべて。

今すぐ購入

Connect with Markus Winand

Markus Winand on LinkedInMarkus Winand on XINGMarkus Winand on Twitter
“Use The Index, Luke!” by Markus Winand is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
法律上の通知 | お問い合わせ | 無保証 | 商標 | プライバシーとGDPR | CC-BY-NC-ND 3.0 license