1

クエリ1:Select * from table where fieldname = 'abc'

クエリ2:Select * from table where fieldname = 'XY�'

  • 私のクエリ1は150mSで実行されます
  • 私のクエリ2は5000mSで実行されます

どちらもゼロの結果を返します(データベースには存在abcXY�ません)。

クエリ2を実行してからクエリ1を再実行すると、クエリ1が同じセッションで実行された場合、クエリ1の時間が長くなり始めます(以前の150ミリ秒ではなく約2000ミリ秒)

私のフィールド名はインデックス付けされています(非クラスター化インデックス)。

Adaptive Server Enterprise/12.5.4を使用しています

両方のショープランをやってみました。どちらも同じ結果を示しています。

私の心配事:

  1. 非ASCII文字を使用したクエリに時間がかかるのはなぜですか?それはインデックスと関係がありますか?
  2. クエリ2を実行しても、クエリ1の応答時間に影響はありません。これを修正する方法はありますか?

ありがとう

4

1 に答える 1

1

私は自分の問題に問題を見つけました。TIBCO EMSは、Unicode文字(ASCII以外)にいくつかの変更を加えます。これにより、sybaseのクエリプランが最適化されていないクエリプランに変更されます。Javaクエリプランでプリペアドステートメントを使用するとキャッシュされ、その結果、将来のすべてのクエリが遅くなります。

于 2011-12-28T20:23:19.637 に答える