次のように、where 句の特定の日付に対してフィルター処理するかなり単純なクエリがあります。
declare @a_date date
set @a_date = '2013-09-17'
select * from table t where t.date = @a_date
上記のクエリは、実行に約 30 分かかります。
クエリを次のように変更すると、実行に数秒しかかかりません。
declare @a_date date
declare @string_date varchar(8)
set @a_date = '2013-09-17'
set @string_date = convert(varchar(8), @a_date, 112)
select * from table t where t.date = @string_date
RapidSQL と iSql の両方を使用して Sybase ASE 12 でこのクエリを実行し、同じ動作を観察しています。Sybase の日付変換に従って、互換性のある日付文字列形式は、演算子の RHS の日付型に自動的に変換されます。
フィールド t.date は日時データ型です。
なぜこれが起こっているのですか?