RDBのパフォーマンスを向上させる上でインデックスを作成することは最も有効な対応の一つです。
ただし、SQLの記述によってはインデックスが効かなくなることがあります。
今回、「達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ」という本で学習し、インデックスが効かなくなるSQLの記述を理解しましたので、それらを紹介したいと思います。
なお、インデックスにはいくつか種類があり、一番代表的なB-treeインデックスが効かなくなる記述について紹介します。
WHERE インデックス列 * 1.1 > 100
のようにインデックス列に対して演算をしてから比較してしまうと、インデックスを使用することが出来ません。WHERE SUBSTR(インデックス列, 1, 1)
のように関数を適用すしてしまうと、インデックスを使用することが出来ません。WHERE インデックス列 IS NULL
のように記述すると、インデックスが使用出来ません。WHERE インデックス列 <> 100
のように記述すると、インデックスを使用することは出来ません。WHERE インデックス列 LIKE "%a"
やWHERE インデックス列 LIKE %a%
のように記述すると、インデックスを使用することは出来ません。WHERE インデックス列 = 100
のように記述すると、インデックスを使用することは出来ません。「達人に学ぶDB設計 徹底指南書 初級者で終わりたくないあなたへ」では、以下についてもインデックスが効かなくなると記載がありましたが、MySQL5.6で検証したところ、インデックスが効きましたので、注意として記載しておきます。
WHERE インデックス列 = 99 OR インデックス列 = 100
のように記載してもインデックスを使用出来ないと記載があったが使用出来た。