検索引数可能

検索引数可能 (英: sargable)とは、関係データベースにおいて、DBMSエンジンがインデックスを利用してクエリの実行を高速化できる述語や条件のこと。日本語の文脈でもSARGableのように記載されることがある。この用語は、 "Search ARGumentABLEの短縮形に"由来する。検索引数可能でないクエリは、non-sargableクエリと呼ばれ、インデックスが効かない。
概要.
検索引数可能でないクエリは、通常はクエリ時間に悪影響を与えるため、クエリ最適化の一環として、それらを検索引数可能な述語に変換する。この最適化の効果は、索引のない本で特定の用語を検索するのと似ており、毎回1ページから見ていく必要があったのを、索引をつけることで特定のページにすぐにジャンプできる。
SQLクエリを検索引数可能ためには、典型的にはcodice_1句に列値を操作する関数を含めるようにすることである。 検索引数可能性が問題になるのはcodice_1句だけではなく、ORDER BY、GROUP BY、およびHAVING句も考慮する必要がある。一方、SELECT句には、パフォーマンスに悪影響を与えることなく、検索引数可能でない式を含めることができる。
簡単な例.
Microsoft SQL Serverでの文法を例に取って見てみる。
codice_1句は、通常、演算子の左側にフィールド値、演算子の右側にスカラー値または式が配置される。
以下の記述は検索引数可能ではない
SELECT * 
FROM myTable
WHERE 11.7 < SQRT(myIntField)
myIntFieldが関数の中に埋め込まれているため、これは検索引数可能ではない。 myIntFieldに使用可能なインデックスがある場合、インデックスは利用できない。さらに、 はmyTableのすべてのレコードで呼び出される。
検索引数可能にした書式：
SELECT * 
FROM myTable
WHERE myIntField > 11.7 * 11.7
myIntFieldは関数に含まれておらず、myIntFieldのインデックスを活用することができるため、これは検索引数可能である。さらに、この式は、テーブル内の各レコードに対してではなく、1回だけ評価される。