IINDEXでorder by付の画面表示用SQLを高速化する

2016/06/25

以下の条件の時、画面表示用SQLを高速化するINDEXの付け方がある。
・画面は100件表示のページング機能付きとする。
・メインテーブルの主キーでorder byをする。
・検索条件をAとする。

a = /*condition*/に合致する総件数がかなり多い場合、aにINDEXをつけても利用されない、あるいは利用されても効率が悪いことがある。
aのINDEXが利用されない時、pkのINDEXを利用して、pkのはじめから順にa = /*condition*/かどうかを見ていくからで、pkの後半にしかa = /*condition*/を満たすデータがなければ、全行検査していることとほぼ同じになってしまう。

【対策】

(a, pk)の複合INDEXにする。
(a, pk)の複合INDEXのはじめから100件とってくるだけなので、このINDEXが利用されたときは、かなり高速。
ただし、aが日付項目で、betweenを利用して多岐にわたってデータが取得されるような場合等は、取得したデータがpk順に並んでいるかどうか不明のため、意味がない。

-SQL
-