2

私は次のようなクエリがあります

SELECT *
FROM myTable
WHERE key LIKE 'XYZ'

値'XYZ'はユーザーによって入力されます(%と_を含めることができます)

文字列連結を使用してクエリを作成すると、10秒で実行されます。しかし、これは安全ではないため、パラメーター化されたクエリを使用する必要があります。

そのため、odbcコマンドオブジェクトとそのexecuteメソッドを使用してクエリを作成し、パラメーターを渡します。

SELECT *
FROM myTable
WHERE key LIKE ?

残念ながら、パラメータ化されたSQL実行メソッドには1分かかります。

このクエリは、ドリルダウン/調査パッケージの一部である多くのクエリの1つであり、すべてのパラメータ化されたクエリで同様の速度低下が発生しました(文字列の連結と比較して)。

時間がどこに向かっているのかを知る(そしてそれを修正する)にはどうすればよいですか?

4

2 に答える 2

2

これが私の推測ですが、それ以上の情報はありません。

SQLServerでも同様の問題が発生しました。SQL Serverでは、テーブルの列が「varchar」で、パラメーター化されたクエリパラメーターが「nvarchar」(またはその逆)の場合、パラメータータイプがインデックスタイプと一致しないため、SQLServerは使用可能なインデックスを無視します。次に、テーブルスキャンが実行されます。

同じことがSybaseでも発生する可能性があります。生成されたクエリを確認できれば、タイプの不一致があるかどうかを確認できます。

この場合、2つの解決策は次のようになります。

  • 列タイプと一致するようにパラメーターのタイプを明示的に設定します
  • 生成されるパラメーターのタイプに一致するように列のタイプを変更します
于 2012-03-22T08:56:21.227 に答える
0

ミッチは正しい提案をしました。

OLEDBドライバーを使用するには、接続文字列を変更する必要がありました。その後、オプションを設定できました。

  • 最適化準備=なし
  • Method=Directを選択します
于 2012-04-05T07:41:24.913 に答える