範囲を指定する条件式の高速化

SQLで範囲を指定した条件式の高速化について紹介します。

BETWEENを用いた高速化

下記のSQLがあった場合
select * from products where 'yyyy-mm-dd' <= lastupdate and lastupdate < 'yyyy-mm-dd'
条件式2つをandでとったものよりも、BETWEEN演算子を用いたほうが高速化できます。
select * from products where lastupdate between 'yyyy-mm-dd' and 'yyyy-mm-dd'

動作速度の比較

条件式2つのand

select * from (大きなテーブル 500万レコード)
  where '2014-06-01' <  (日付列) and (日付列) < '2014-07-01' 

BETWEEN演算子

select * from (大きなテーブル 500万レコード)
  where between (日付列) '2014-06-01' and < '2014-07-01' 

結果

条件式2つのandBETWEEN演算子
実行速度(結果レコード数:45万レコード)1:211:08

測定結果は目安です。若干ですが、BETWEEN演算子を用いたほうが高速です。
補足
利用しないフィールドはselectに含めないなどの一般的なSQLクエリのチューニングでも高速化が期待できます。

著者
iPentec.com の代表。ハードウェア、サーバー投資、管理などを担当。
Office 365やデータベースの記事なども担当。
最終更新日: 2024-01-06
作成日: 2014-08-12
iPentec all rights reserverd.