7

だから、おまけの欄に「Using Where」があるのはいいことだなといつも思っていました。しかし、私は EXPLAIN を解釈する同僚のために茶色のバッグ ランチを計画していましたが、今はよくわかりません。MySQL のドキュメントでは、「Using Where」に関するメモに次のように記載されています。

WHERE 句を使用して、次のテーブルと照合するか、クライアントに送信する行を制限します。テーブルからすべての行をフェッチまたは検査する意図がない限り、Extra 値が Using where ではなく、テーブル結合タイプが ALL または index である場合、クエリに何か問題がある可能性があります。WHERE 句のすべての部分にインデックスを使用している場合でも、列が NULL になる可能性がある場合は where の使用が表示されることがあります。

これにより、WHERE 句にインデックスの一部しか含まれていない場合でも、列に NULL 値が含まれる可能性がある場合でも、MySQL は行を調べると考えるようになります。

本当?もしそうなら、必要がなければ NULL を含まないように列を変更する必要がありますか? スピードブーストは見られますか?

4

1 に答える 1

6

null条件をチェックする必要があるため、null許容列にはオーバーヘッドがあります。列がnullである必要がない場合、または要件でnullが許可されていない場合は、必ず列を作成してnot nullください。

インデックスに関しては、インデックスの構成によって異なります。インデックスがで定義されており、where句で(a,b,c)使用している場合、このインデックスは使用されていないため使用できません。b,ca

于 2011-08-09T22:00:57.533 に答える