MySQL 最適化戦略 (推奨)

MySQL 最適化戦略 (推奨)

要約すれば:

  1. 1. データベースの設計とテーブルの作成時にパフォーマンスを考慮する
  2. 2. SQLの記述を最適化する必要がある
  3. 3. パーティション、テーブル、データベース

テーブルを設計する場合:

  1. 1. フィールドで null 値を使用しないでください。null 値はクエリや最適化が難しく、余分なインデックス スペースを占有します。null ではなく、デフォルトの数値 0 を使用することをお勧めします。
  2. 2. BIGINT の代わりに INT を使用するようにしてください。負でない場合は、UNSIGNED を追加します (これにより、値の容量が 2 倍になります)。もちろん、TINYINT、SMALLINT、または MEDIUM_INT を使用する方が適切です。
  3. 3. 文字列型の代わりに列挙型または整数型を使用する
  4. 4. DATETIMEの代わりにTIMESTAMPを使用する
  5. 5. 1 つのテーブルにフィールドが多すぎないようにしてください。フィールド数は 20 に制限することをお勧めします。
  6. 6. IPを格納するために整数を使用する

索引:

  1. 1. インデックスは多ければ多いほど良いです。クエリに基づいてインデックスを作成する必要があります。WHERE コマンドと ORDER BY コマンドに関係する列にインデックスを作成することを検討してください。EXPLAIN を使用して、インデックスが使用されているか、またはテーブル全体のスキャンが実行されているかを確認できます。
  2. 2. WHERE 句のフィールドに NULL 値を使用しないでください。そうしないと、エンジンはインデックスの使用を中止し、テーブル全体のスキャンを実行します。
  3. 3. 値が 2 つまたは 3 つしかない「性別」フィールドなど、値の分布が非常にまばらなフィールドは、インデックス作成には適していません。
  4. 4. 文字フィールドのプレフィックスインデックスのみを作成する
  5. 5. 文字フィールドを主キーとして使用しないことをお勧めします。
  6. 6. 外部キーは不要、制約はプログラムによって保証される
  7. 7. UNIQUEを使わないようにし、プログラムに制約を守らせる
  8. 8. 複数列インデックスを使用する場合は、順序とクエリ条件の一貫性を保ち、不要な単一列インデックスを削除します。

要約: 適切なデータ型を使用し、適切なインデックスを選択する

SQL の記述を最適化する必要があります。

クエリ結果のレコードを制限するには、limitを使用します。

select * を避け、検索する必要があるフィールドをリストします。

サブクエリの代わりに結合を使用する

大きな削除または挿入ステートメントを分割する

スロークエリログをオンにすると、遅いSQLを見つけることができます。

列操作なし: SELECT id WHERE age + 1 = 10。データベース チュートリアル関数、計算式など、列に対するすべての操作はテーブル スキャンになります。クエリを実行するときは、操作を等号の右側に移動するようにしてください。

SQL 文はできるだけシンプルにする必要があります。1 つの SQL 文は 1 つの CPU でのみ実行できます。大きな文はロック時間を短縮するために小さな文に分割する必要があります。1 つの大きな SQL 文はデータベース全体をブロックする可能性があります。

OR を IN に書き換えます。OR の効率は n ですが、IN の効率は log(n) です。IN の数は 200 以内に抑えることをお勧めします。

実装には関数やトリガーは必要ありません

%xxx 形式のクエリを避ける

JOINは控えめに使用してください

比較には同じ型を使用します(例: '123' と '123'、123 と 123)

WHERE 句では != または <> 演算子の使用を避けてください。そうしないと、エンジンはインデックスを放棄し、テーブル全体のスキャンを実行します。

連続した値の場合は、IN ではなく BETWEEN を使用します: SELECT id FROM t WHERE num BETWEEN 1 AND 5

リスト データにテーブル全体を使用しないでください。LIMIT を使用してデータをページに分割します。ページ数は大きすぎないようにしてください。

エンジン:

マイISAM

行ロックはサポートされていません。読み取り時に読み取りが必要なすべてのテーブルがロックされ、書き込み時にテーブルに排他ロックが追加されます。

トランザクションはサポートされていません

外部キーはサポートされていません

クラッシュ後の安全な回復をサポートしていない

テーブルの読み取りとクエリの実行中にテーブルに新しいレコードを挿入する機能をサポートします。

BLOBとTEXTの最初の500文字のインデックス作成と全文インデックス作成をサポート

インデックスの遅延更新をサポートし、書き込みパフォーマンスを大幅に向上

変更されないテーブルについては、ディスク容量の使用量を大幅に削減するために圧縮がサポートされています。

翻訳

行ロックをサポートし、MVCCを使用して高い同時実行性をサポートします。

サポート業務

外部キーをサポート

クラッシュ後の安全な回復をサポート

全文インデックスはサポートされていません

一般的に、MyISAM は SELECT 集中型テーブルに適しており、InnoDB は INSERT および UPDATE 集中型テーブルに適しています。

パーティション、テーブル、データベース(読み取りと書き込みの分離)

上記は、編集者が紹介したMySQL最適化戦略の詳細な説明と統合です。皆様のお役に立てれば幸いです。ご質問がある場合は、メッセージを残してください。編集者がすぐに返信します。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • MySQLクエリで大文字と小文字を区別しない問題を解決する方法
  • MySQLがファントムリードを解決する方法の詳細な説明
  • Navicat を使用してリモート Linux MySQL データベースに接続するときに発生する 10061 不明エラーの詳細な説明
  • MySQLデータベースの追加、削除、変更操作の詳細な説明
  • シェルスクリプトを使用してMySQLにインデックスを追加する方法
  • MySQL 文字セットの文字化けとその解決方法
  • MySQLは遅いSQLを開始し、原因を分析します
  • MySQL は、元のデータと同じデータがある場合、更新ステートメントを再度実行しますか?
  • MySQLクエリが遅い場合の理由と解決策
  • 間違った MySQL コマンドをキャンセルしたい場合はどうすればいいですか?

<<:  Nginx 書き換えジャンプの適用シナリオの詳細な説明

>>:  Vue+express+Socketでチャット機能を実現

推薦する

Vue+el-tableはセルの結合を実現します

この記事の例では、参考までにセルの結合を実現するためのel-tableの具体的なコードを共有していま...

jsネイティブウォーターフォールフロープラグイン制作

この記事では、jsネイティブウォーターフォールフロープラグインの具体的なコードを参考までに共有します...

MySQLのグローバルロックとテーブルロックに関する詳細な理解

序文ロックの範囲に応じて、MySQL のロックは、グローバル ロック、テーブル ロック、行ロックに大...

Vueはシンプルなデータ双方向バインディングを実装します

この記事では、Vueの具体的なコード例を参考までに紹介します。具体的な内容は以下のとおりです。初心者...

CSS 疑似クラス: 空っぽだと光る (サンプルコード)

最近私の記事を読んだ人なら誰でも、私が現在WeChatミニプログラムプロジェクトを担当しており、その...

ページにデータを表示するReactメソッド

目次親コンポーネントリストボックスリストコンポーネントボタンコンポーネント PageButton昨年...

TypeScript の条件型に関する詳細な読書と実践記録

目次ジェネリック型での条件型の使用ツールタイプ脱出ポッド矢印関数で条件型を使用する型推論による条件型...

https暗号化アクセス用にnginxを設定するための詳細なチュートリアル

環境: 1 CentOS Linux リリース 7.5.1804 (コア)ファイアウォールと sel...

ポップアップはすべて不正なものではありません。ウェブサイトのポップアップをデザインするためのヒント

ポップアップニュースは国内のインターネットサービスでは一般的であり、リアルタイムプッシュ方式はウェブ...

CSS3 を使用したテキスト折り紙効果のサンプルコード

序文この記事では主に、CSS3 を使用してテキスト折り紙効果を実現する例を紹介します。これは、参考と...

Vue のプロダクション環境と開発環境を切り替えてフィルターを使用する方法

目次1. 本番環境と開発環境を切り替える最初の方法: .envファイルを設定する2番目の方法2. フ...

MySQL ストアド プロシージャと共通関数のコード分析

mysql ストアド プロシージャの概念:特定のタスク (クエリと更新) を実行できる、データベース...

Nginx/Httpd ロードバランシング Tomcat 設定チュートリアル

前回のブログでは、Nginx と httpd を使用して、逆生成用のバックエンド Tomcat サー...

Linuxで中断されたシステムを呼び出す方法

序文低速システム コールとは、決して戻らない可能性があり、プロセスを永久にブロックするシステム コー...

VUEはトークンログイン認証を実装

この記事では、トークンログイン認証を実装するためのVUEの具体的なコードを例として紹介します。具体的...