2

データベース アプリケーションを高速化しようとしていますが、現在、アプリケーションへの影響が少ない簡単なものを探しています。

String が条件を満たしているかどうかを確認するために検索する最も効果的な方法は何だろうと思っていました。最初のオプションを使用する正当な理由はありますか。

たとえば、フィールド呼び出しステータスがあり、値が Discontinued としてのみ保存されるとします。

  • ステータスは「Disc%」のようではありません
  • ステータス != '生産中止'
  • ステータス <> '生産中止'
4

4 に答える 4

3

を使用する理由はありませんNOT LIKE。不等式演算子の形式を使用する!=か、<>形式を使用するかは、個人的な好みの問題です。

于 2012-05-16T17:02:06.603 に答える
1

説明のために、STATUS フィールドは NULL 可能であり、"Discontinued" または NULL の 2 つの値が含まれると仮定します。この場合、上記のどのクエリでも期待どおりの結果が得られません。NULL が何かと比較されると、TRUE または FALSE ではなく NULL が返されるため、述語が is またはその他の場合、STATUS が NULL である行は返されませんSTATUS <> 'Discontinued'。結果を得るには、あなたが言わなければならないことを期待していると思いますSTATUS IS NULL

共有してお楽しみください。

于 2012-05-16T19:06:17.263 に答える
0

私は2番目のものに投票します。最初のものはテーブルスキャンを強制します。

EXPLAIN PLANの両方を書いて、見てください。

于 2012-05-16T17:01:45.170 に答える
0

単一の値または null のいずれかを保持する列は、特にその値と等しくない行を検索している場合、そのテーブルに対して実行するクエリのパフォーマンスに違いをもたらす可能性はほとんどありません。

したがって、その列にインデックスが付けられているかどうかに関係なく、これらのオプションはどれも同じように機能します。ただし、他の開発者とデータベース オプティマイザーの両方に対する意図の表現として、次のようにコーディングすることをお勧めします。

status is null   
于 2013-01-20T12:18:47.270 に答える