-1

いくつかの結合を含む単純なクエリがあります。クエリには約4または5のWHERE条件がありますが、結果が返されない場合は最大15秒かかります。ただし、特定のOR条件を除外すると、5秒しかかからず、約20行が返されます。

とにかく、ORには内部選択や派手なものがなく、列の単純な条件であるため、ORを何らかの方法でリファクタリングする必要があると思いました。

何か案は?これはテーブルロックの問題ではないようです。SQLManagementStudio(2008 RC2サーバー)から直接クエリを実行しています。

4

3 に答える 3

2

おそらく:

  1. 統計が最新ではありません
  2. インデックスを再構築する必要があります
  3. または、パラメータ スニッフィングが発生している
  4. 「不足している」インデックスがあります
  5. 上記の組み合わせ

詳細が必要です。

于 2011-05-24T06:41:02.267 に答える
0

実際の条項自体を見たことがありますか?たとえば、大きなテーブル全体での文字列比較は、プロセッサを非常に多く使用する可能性があります。絶対に句を配置する必要がある場合は、おそらく「クイック」結果セットを一時テーブルにダンプし、そこからスロー句を使用してさらにフィルタリングする必要があります。

インデックスも確認する必要があります。まったく同じ効果が適用されます。インデックスを 1 つまたは 2 つ使用すると、クエリが 2 つの部分からなる検索に変わります。潜在的な結果の高速なインデックス ベースの検索と、それに続くサブ結果の低速ではあるが限定的な検索です。

于 2011-05-24T06:42:02.387 に答える
0

詳細は何もありませんが、私が学んだことの1つを次に示します。

Select * from mytable where dateadd(day,1,table_date) > getdate()

AGES で実行されます

一方

select * from mytable where table_date>dateadd(day,-1,getdate())

より速いです。計算は 1 回で済み、直接の潜在的なインデックスと比較できます。

于 2011-05-24T06:42:54.557 に答える