1.コンテンツ
1、選択
1-1。インデックス
- 「=」を使用してみてください。インデックスの使用量を増やすために「<>」を使用することは避けてください。
- 注意して使用(しない)してください。全表スキャンが発生する可能性があり、xxからyyの間で置き換えることができます。
- 条件を回避または結合します。または、各条件列にインデックスを付けることを検討してください。
- フィールドの計算は避けてください。関数、4つの算術など。
- 複合インデックスの最初のフィールドは、インデックスの使用を保証できます。
- インデックスはできるだけ多くありません。挿入/更新により、インデックスが再構築されます。通常は6つ以下です。
1-2。数量
1.制限は、限られた数の結果をクエリするために使用され、ページングにも使用できます。全表スキャンは避けてください。データベースとアプリケーション間の不要なネットワーク伝送を減らす
2.適切なデータタイプを選択します。
- SMALLINTをTINYINTに置き換えて、メモリとディスクの消費を削減します。Varcharはcharに置き換わるもので、ストレージスペースを節約し、クエリの効率を向上させることができます。
- 数値フィールドは、比較の数を減らすために文字タイプを置き換えます。文字列は各文字を1つずつ比較しますが、数値型は1回だけ比較します。
3.許可されている場合は、UNIONをUNIONALLに置き換えます。UNION ALLは重複排除を行わないため、より効率的です。
4.使用を避けてください SELECT *
。全表スキャンを避け、インデックスを効果的に使用できず、ネットワークIOのオーバーヘッドを増やします。
5.条件フィールドにインデックスを付けてみてください。WHERE、JOIN、およびORDER BY句の列には、可能な限りインデックスを付ける必要があります。
2.ステートメントを挿入します
1.テキストファイルの読み込みは、複数のファイルを挿入するよりも高速です。
2.大きなINSERT、DELETE、およびUPDATEクエリを複数の小さなクエリに分割します。
3、グループ化
1.並べ替えを禁止するには、orderをnullで指定します。デフォルトでは、col1、col2でグループ化し、col1、col2で並べ替えると、結果が同様に並べ替えられます。追加:filesortには時間がかかります。
4、注文
1.条件とorderbyが同じインデックスを使用する場合&& order byorderとindexorderが同じ&& orderbyフィールドが昇順または降順
例:下列SQL可以使用索引:
SELECT * FROM t1 ORDER BY key_part1, key_part2,... ;
SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC, key_part2 DESC;
SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 DESC;
但以下几种情况下则不使用索引:
SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;
--order by的字段混合ASC和DESC
SELECT * FROM t1 WHERE key2=constant ORDER BY key1;
--用于查询行的关键字与ORDER BY中所使用的不相同
SELECT * FROM t1 ORDER BY key1, key2;
--对不同的关键字使用ORDER BY:
5.ネストされたクエリ
1.場合によっては、サブクエリはJOINに置き換えられます
# SQL1
select * from sales2 where company_id not in ( select id from
company2 )
# SQL2
select * from sales2 left join company2 on sales2.company_id =
company2.id where sales2.company_id is null
# SQL1 VS SQL2
1、这里join之所以更快,是因为不需要在内存中创建临时表完成SQL1中两个步骤的查询工作。
2、当company2表的id有索引,性能会更好。
6.その他
1.インデックスのヒント:
- USE INDEXは、MySQLに参照インデックスを参照するように促し、他のインデックスを無視します。
- IGNORE INDEXは、1つ以上のインデックスを無視します。
- FORCE INDEXは、参照インデックスの使用を強制します。
2.同じ結果セットを複数回実行すると、SQLステートメントの一貫性が保たれ、クエリバッファーが最大限に活用されます。
例:
第1次:SELECT price FROM order WHERE id = 123456 and region = 'BEIJING';
第2次:同样查询,请保持语句一致性,如不要将where里id和region调换。
3. SQLチューニングは、最も近い実際のデータセットとハードウェア環境を備えた開発環境で最もよくテストされてから、実稼働環境にリリースされます。
2、参照
1.「MySQLを簡単な方法で学ぶ」-第18章SQLの最適化