[データベース] SQLステートメントの最適化スキル

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の最適化

おすすめ

転載: blog.csdn.net/HeavenDan/article/details/112224299