◆SQLを最適化する理由
私たちがプロジェクトを開発した初期、業務データ量が比較的少ないため、一部のSQLの実行効率がプログラムの実行効率に与える影響はあまり明らかではありません。時間の蓄積に従って、業務のデータ量の増加、SQLの実行効率はプログラムの実行効率に対する影響は次第に増大して、この時SQLの最適化に対してとても必要です。
◆SQL最適化のいくつかの方法
1、事務を短く精悍に保つ
トランザクションの使用原則:すぐに使用し、使い終わったらオフにします。
トランザクションに関係なく操作をトランザクションの外に配置し、ロックリソースの使用量を削減します。
一貫性を損なわない前提で、長いトランザクションの代わりに複数の短いトランザクションを使用します。
2、できるだけselect*を使わないで、必要なデータ列だけ取ります
CPU、メモリ、IO、ネットワーク帯域幅を節約します。
より安全な設計:テーブルの変化による影響を軽減します。
covering indexを使用する可能性を提供します。
3、同じフィールド、orをin()に書き換える
or効率:O(n)。
in効率:O(Logn)。
nが大きいと、orがずいぶん遅くなります。
4、負の条件照会を避ける
not、!=、<>、!<、!>、not exists、not in、not likeなど。
5、%接頭辞のあいまいなクエリを避ける
インデックスは使用できません。
全テーブルスキャンが発生します。
6、where句でフィールドを式操作しない
select user_id,user_project from user where age*2=36;
変更を推奨:
select user_id,user_project from use where age=36/2;
7、書き換えor union
異なるフィールドで、orをunionに変更します。
8、できるだけunion allをunionの代わりに使う
結果を重くする必要がない場合はunion allを使用します。
unionにはオーバーヘッドがあります。
9.余分な並べ替えを避ける
groupbyはデフォルトでパケットフィールドに従ってソートされ、order by nullを使用してソートを禁止できます。
select phone,count(*) from post group by phone order by null limit 1;