mysqlデータベースクエリーの最適化は、どのような面から最適化すればいいですか?


mysqlデータベースのデータがますます多くなると、クエリーの効率がますます低くなっていることに気づくかもしれません.指をさすほど低いかもしれません.数本のデータをクエリーするだけで10数秒から数十秒かかります.これは非常に致命的です.ユーザーがあなたのネットワークステーションにアクセスすると、10数秒が過ぎてもデータがロードされません.では、ユーザーの流出は想像できません.
そこで、データベース・クエリーの効率が低下した原因を分析します.一般に、この結果には、1,sql文とインデックス2,テーブル構造3,ストレージエンジン4,NICトラフィック5,サーバハードウェア6,ディスクIOのいくつかの原因がある.
本稿では、コストが最も低く、最も効果的な最適化案であるため、主にsqlとインデックスを最適化します(もちろん、お金が多ければ、ハードウェアのアップグレードはどの最適化よりも便利です).
1、サブクエリの代わりにテーブル接続を使用すると、まずテーブル接続はメモリに一時テーブルを確立しません.次に、whereでサブクエリを使用すると、データクエリの回数が増加します.
2、sql文を書くときは、インデックスが失効する可能性があり、全テーブルスキャンを招き、クエリーの効率を大幅に低下させるため、関数、演算子、キーワードの使い方に注意してください.具体的にはこのリンクの文章を参考にすることができて、比較的に詳しい解読があって、私はここで繰り返しませんhttps://www.cnblogs.com/jett010/p/4826655.html
3文字型フィールドを検索するときに、LIKEキーワードとワイルドカードを使うことがあります.これは簡単ですが、システムの性能を犠牲にする代わりに、できるだけ使わなくてもいいです.使うなら、インデックスのあるフィールドで使います.
4.クエリーでMySQLを自動タイプ変換しないでください.変換プロセスでもインデックスが機能しないので、同じタイプのフィールド間で比較するのが望ましいです.
5では、手動でテンポラリ・テーブルを作成する代わりにunionを使用します.テンポラリ・テーブルを使用する必要がある2つ以上のselectクエリーをマージするクエリーを1つにすることができます.クライアントのクエリー・セッションが終了すると、テンポラリ・テーブルが自動的に削除され、データベースが整列し、効率的になります.
6、テーブルをロックする操作を行って、トランザクションはきっとmysqlの中で不可欠で、これはデータの安全の基本的な保障で、しかしトランザクションのメカニズムはデータベースに対するロックで、これは高い同時の情況をもたらすことができて、ユーザーのアクセスの応答は遅延して、悪いユーザーの体験をもたらして、だから私達は手動でロックの範囲を縮小することができて、テーブルのロックを行います
LOCK TABLE inventory WRITE SELECT quantity  FROM   inventory   WHERE Item='book';

...

UPDATE   inventory   SET   Quantity=11   WHERE  Item='book';UNLOCKTABLES

7、インデックスの最適化、インデックスはmysqlがクエリーの速度を高める最も一般的な方法であるべきで、私たちはどのフィールドでインデックスを確立すべきですか?シーンによって要件が異なるため、遅いクエリー・ログを表示したり、適切なフィールドを選択してインデックスを作成したりすることができます.一般的に、インデックスの使用原則は、よくクエリーされる高周波フィールドにインデックスを作成する必要があります.textタイプのフィールドなど、大きなフィールドにインデックスを作成しないでください.インデックスを使用すると、クエリの数がテーブル全体のデータ量の3%-5%を占めるのは、インデックス効果を最も発揮できる範囲です.結合インデックスでは、左接頭辞メタグループに従う必要があります.そうしないと、インデックスは失効します.自分が書いたsql文がインデックスに使われているかどうかを知りたい場合は、explainキーワードで確認してください.
8、sql文を分割し、論理が複雑で、長い関連性があり、多くのsql文を複数の単一クエリーの小さなsql文に分割します.これにより、キャッシュの効率が向上し、テーブルロックのロック時間を短縮できます.
最後に、sql文の最適化をまとめます.まず、アプリケーション内のどのsql文が遅いかを特定します.遅いクエリー・ログ、show profiles、show processlist、explainでこのsql文またはこれらのsql文がなぜ遅いのかをクエリーし、一連の最適化を行うことができます.最適化は、まずインデックスから着手し、データアクセス、長難問クエリー文、および特定のタイプのクエリー文から最適化します.