一般的な最適化戦略におけるMySQLのSQL文

1.全表スキャン避け
クエリの最適化を、全表スキャンを回避しようとしてください、あなたは最初の場所と順番に関与列でインデックス作成を検討すべきです。

2. NULL値を避ける分析
ヌル値に避けなければならないことは、where句内のフィールドを決定し、エンジンがインデックスと全表スキャンを使用してあきらめさせる、などになります。

numがnullであるここで、tからIDを選択します

あなたは何のNULL値は、このクエリが存在しないことを保証するために、テーブル内のNUM、num個の列にデフォルト値の0を設定することができます。

ここでNUM T = 0からIDを選択

3.分析の回避と同等では
そうでない場合、エンジンがインデックスと全表スキャンを使用してあきらめます、句!=または<>オペレータでは避けるべきです。

4.ロジックを使用しないでくださいまたは
接続したり、状態はエンジンのような指数と全表スキャンを使用して、あきらめてしまいますwhere句では避けるべきです。

TからIDを選択してここでNUM = 10またはNUM = 20

クエリが実行できます。

TからIDを選択してここでNUM = 10

労働組合のすべて

TからIDを選択してここでNUM = 20

ではないロジック5.注意
では注意して使用する必要があるとないで、それ以外の場合は、次のような、全表スキャンにつながります。

でNUM(idは> 10 T2からIDを選択)T1からIDを選択

この場合、外側のクエリは、インデックスを使用していない、全表スキャンになります。次のように改正されます。

T1からIDを選択し、(T1ここで、ID> 10からIDを選択する)、T2 t1.id = t2.id

このインデックスが使用されている時に、それが大幅にクエリの効率を向上させることができます。

6.注意あいまいクエリ
次のクエリは、フルテーブルスキャンにつながります。

どこ名「%ABC%」のようなトンからIDを選択します

必要条件がある場合、ファジークエリは、名前があいまいクエリに「ABCの%」のようなインデックスは、現時点で使用されるTから選択IDを使用してもよいです。最初に一致したロジックが必要な場合は、フルテキスト検索エンジン(弾性検索、Luceneと、Solrの、など)を使用することをお勧めします。

クエリ7.避け計算フィールドは、
エンジンがインデックスと全表スキャンを使用してあきらめてしまいますwhere句の式の操作フィールドのために避けるべきです。以下のような:

TからIDを選択する場合NUM / 2 = 100

お読みください:

* 2 NUM = 100トンからIDを選択

8.オペレーションフィールドのクエリ機能を避ける
句エンジンがインデックスとフルテーブルスキャンを使用してあきらめてしまいますフィールドに機能動作に避けるべきです。以下のような:

名前ID ABCで始まる - サブストリング(名前、1,3)= 'ABC' がTからIDを選択します

お読みください:

どこ名「ABC%」のようなトンからIDを選択します

9.WHERE句は「=」左の注意は
、where句でない関数、算術演算、またはその他の表現「=」左ない、またはシステムが適切に索引付け動作しない可能性があります。

使用10.組み合わせ指数
インデックスは複合インデックスであるならば、あなたはシステムを確保するために、条件の最初のフィールドとしてインデックスを使用しなければならない、インデックスを使用しての条件としてフィールドには、インデックスを使用してそれ以外のインデックスが使用されることはありません可能な限り、フィールドの順序はインデックス順と一致しているようにする必要があります。

11.異議なしでクエリを定義しないでください
、このような空のテーブル構造を作成する必要として、意味がないクエリを記述しません。

1 = 0 Tから#tをにCOL1、COL2を選択

このコードは、任意の結果セットを返しますが、システムリソースを消費し、これによって置き換える必要がありません。

(...)テーブルに#tを作成します

12.exists
代わりに使用が良い選択であるが存在する中での多くの時間を:

(BからNUMを選択)でここでNUMからNUMを選択

次の文で置き換えます。

(ここで、NUM = a.num Bから1を選択)が存在するところからNUMを選択

13.インデックスが失敗する可能性があり
、テーブルのような、すべてのインデックスが有効なクエリは、SQLクエリの最適化は、テーブル内のデータに基づいて行われるインデックスは、重複データの大規模な数を示したときに、SQLクエリはインデックスを使用して行っていないかもしれないが、フィールドを持っていますセックス、男性、女性のほぼ半分ずつ、性別上に構築されたインデックスは、クエリの効率に影響を与えない場合でも。

表14. [フィールドタイプは、
数値情報を含むフィールドのみが接続とクエリのパフォーマンスが低下キャラクターデザイン、可能ではなく、ストレージコストを増加させた場合、数値フィールドを使用しています。一度だけ文字列内の各文字を比較することにより、クエリとの接続1を処理し、数値の比較のために、エンジンが十分にあるためです。すべての可変長フィールドの小さな収納スペースの最初の、あなたは検索効率の比較的小さなフィールドで、クエリに続いて、ストレージスペースを節約することができますので、代わりに炭の活用可能性のvarchar型は、明らかに高いです。

クエリ構文では15のフィールドは
どこでもSELECTを使用しないでください代わりのフィールドの特定のリストで、Tから「」未満でフィールドのいずれかを返さないでください。

16.インデックスは独立した最適化がある
すべてのキーワードは、このような、労働組合を使用しないようにしよう、*労働組合を使用しない、判決と同等のものを使用しようと、使用したり、キーワードしないようにしよう。表には5以下で推奨していない参加します。5つ以上の場合は、テーブルの設計を考えます。インラインより接続テーブルアウトリーチを用いて(インターネットアプリケーション)。データに接続された外部ベースが存在します。このように左B、ベースデータがAであるジョイン 内側全体接続、結果セットを取得する接続状況に応じて接続を完了するためにデカルト積を使用して、B、ない基本データを結合します。

大規模なデータテーブルの順序は、ページングクエリを実行すると、ページ数が多すぎる場合、ページングロジックの完了とサブクエリを使用します。

テーブルリミット1000000、10から選択*

テーブルからどこのid(テーブルlimit100000、10からPKを選択)で選択*

おすすめ

転載: blog.51cto.com/14551317/2440300
おすすめ