トップQs
タイムライン
チャット
視点
検索引数可能
ウィキペディアから
Remove ads
検索引数可能 (英: sargable)とは、関係データベースにおいて、DBMSエンジンがインデックスを利用してクエリの実行を高速化できる述語や条件のこと。日本語の文脈でもSARGableのように記載されることがある[1]。この用語は、 Search ARGumentABLEの短縮形に由来する。検索引数可能でないクエリは、non-sargableクエリと呼ばれ、インデックスが効かない。
![]() | この記事には複数の問題があります。 |
概要
検索引数可能でないクエリは、通常はクエリ時間に悪影響を与えるため、クエリ最適化の一環として、それらを検索引数可能な述語に変換する。この最適化の効果は、索引のない本で特定の用語を検索するのと似ており、毎回1ページから見ていく必要があったのを、索引をつけることで特定のページにすぐにジャンプできる。
SQLクエリを検索引数可能ためには、典型的にはWHERE
句に列値を操作する関数を含めるようにすることである。 検索引数可能性が問題になるのはWHERE
句だけではなく、ORDER BY、GROUP BY、およびHAVING句も考慮する必要がある。一方、SELECT句には、パフォーマンスに悪影響を与えることなく、検索引数可能でない式を含めることができる。
- 検索引数可能な演算子:
=, >, <, >=, <=, BETWEEN, LIKE, IS [NOT] NULL
- 検索引数可能な演算子だが速度改善があまり見込めないもの:
<>, IN, OR, NOT IN, NOT LIKE
Remove ads
簡単な例
Microsoft SQL Serverでの文法を例に取って見てみる。
WHERE
句は、通常、演算子の左側にフィールド値、演算子の右側にスカラー値または式が配置される。
以下の記述は検索引数可能ではない
SELECT *
FROM myTable
WHERE 11.7 < SQRT(myIntField)
myIntFieldが関数の中に埋め込まれているため、これは検索引数可能ではない。 myIntFieldに使用可能なインデックスがある場合、インデックスは利用できない。さらに、 SQRT()
はmyTableのすべてのレコードで呼び出される。
検索引数可能にした書式:
SELECT *
FROM myTable
WHERE myIntField > 11.7 * 11.7
myIntFieldは関数に含まれておらず、myIntFieldのインデックスを活用することができるため、これは検索引数可能である。さらに、この式は、テーブル内の各レコードに対してではなく、1回だけ評価される。
Remove ads
関連項目
- ブロック範囲インデックス
- クエリの最適化
脚注
参考文献
外部リンク
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads