4

[編集:リーの提案に基づいて編集

どこで使用するかについて一貫して問題があります

 column like <cfqueryparam cfsqltype="cf_sql_varchar" value="abc%" />

よりも約 30ms 遅いです。

column like 'abc%'

プランがキャッシュされる前に、両方のクエリが約 60 ミリ秒で同時に実行されます。後続のヒットは、cfqueryparam を使用しないクエリで 1 ミリ秒、cfqueryparam を使用するクエリで 30 ミリ秒になります。DSN は Unicode を送信しており、列の型は nvarchar です。「=」を使用したこの動作には気付かず、LIKE 演算子だけです。この特定の列は索引付けされていません。

この動作がなぜ起こるのか誰にも分かりますか?

4

1 に答える 1

1

パラメータ化されていないパラメータを使用してクエリを実行すると、SQL Server で同様の動作が見られました。私が知る限り、クエリ

select x from y where x.a like 'dog'

yテーブルデータが変更されない限り、計画、統計、または出力が変更されることはありません。SQL Server はこれを検出でき、実際に検出し、計画/統計/出力をこのクエリよりも長い期間保存します。

select x from y where x.a like @p1

可能なパラメーター値の間に共通点はありません。実際には、プランがキャッシュされた後、パフォーマンスの違いが見られると言われています。これは、キャッシュされるのはプランだけではないためです。

また、クエリ オプティマイザーがパラメーター化されたクエリに有効なインデックスを使用しなかったケースも見てきました。

于 2012-08-22T08:41:00.100 に答える