1. ホーム
  2. sql-server

[解決済み】SQLステートメントをサーガブルにするのは何ですか?

2022-04-02 19:26:29

質問

定義によると(少なくとも私が見た限りでは)sargableとは、クエリーが使用する実行プランをクエリーエンジンに最適化させることが可能であることを意味します。 調べてみましたが、この件に関する回答はあまりないようです。 そこで質問ですが、SQLクエリをサーガブルにするもの、しないものは何でしょうか? 何かドキュメントがあれば、非常にありがたいです。

参考までに サルガモ

解決方法は?

クエリになる最も一般的なもの 非課税 の中にフィールドを含めることです。 機能 をwhere節で指定します。

SELECT ... FROM ...
WHERE Year(myDate) = 2008

SQLオプティマイザはmyDateにインデックスがあったとしても、それを使うことはできません。文字通り、テーブルのすべての行に対してこの関数を評価しなければならないのです。もっといい方法があります。

WHERE myDate >= '01-01-2008' AND myDate < '01-01-2009'

他の例もあります。

Bad: Select ... WHERE isNull(FullName,'Ed Jones') = 'Ed Jones'
Fixed: Select ... WHERE ((FullName = 'Ed Jones') OR (FullName IS NULL))

Bad: Select ... WHERE SUBSTRING(DealerName,4) = 'Ford'
Fixed: Select ... WHERE DealerName Like 'Ford%'

Bad: Select ... WHERE DateDiff(mm,OrderDate,GetDate()) >= 30
Fixed: Select ... WHERE OrderDate < DateAdd(mm,-30,GetDate())