序文良い習慣はすべて宝物です。この記事は、SQL の後悔の治療法、SQL パフォーマンスの最適化、SQL 標準のエレガンスという 3 つの方向に分かれています。SQL を書くための 21 の良い習慣とベスト プラクティスを紹介します。 SQLを書いた後、実行プランを表示する方法を説明します(SQLパフォーマンスの最適化) 日常の開発で SQL を書くときは、次の良い習慣を身につけるようにしてください。SQL を書いた後、explain を使用して分析し、インデックスが使用されているかどうかに特に注意してください。 削除または更新文を操作するときは制限を追加する(SQL後悔薬) 削除または更新ステートメントを実行するときは、制限を追加してみてください。次の SQL を例に挙げます。
制限を追加すると、次のような利点があります。
テーブルを設計するときは、すべてのテーブルとフィールドに対応するコメントを追加します(SQL 標準およびエレガント) この良い習慣を身につける必要があります。データベース テーブルを設計するときは、すべてのテーブルとフィールドに対応するコメントを追加して、後でメンテナンスしやすくします。 良い例: テーブル「アカウント」を作成します( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主キーID', `name` varchar(255) DEFAULT NULL COMMENT 'アカウント名', `balance` int(11) デフォルト NULL コメント 'Balance', `create_time` datetime NOT NULL COMMENT '作成時刻', `update_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間', 主キー (`id`)、 キー `idx_name` (`name`) BTREE の使用 ) ENGINE=InnoDB AUTO_INCREMENT=1570068 DEFAULT CHARSET=utf8 ROW_FORMAT=REDUNDANT COMMENT='アカウントテーブル'; 反例: テーブル「アカウント」を作成します( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) デフォルト NULL, `balance` int(11) デフォルト NULL, `create_time` 日時 NOT NULL 、 `update_time` datetime は UPDATE CURRENT_TIMESTAMP では NULL ではありません。 主キー (`id`)、 キー `idx_name` (`name`) BTREE の使用 ) ENGINE=InnoDB AUTO_INCREMENT=1570068 デフォルト CHARSET=utf8; SQL の記述形式では、キーワードのサイズを一定に保ち、インデントを使用します。 (SQL は洗練されており、標準化されています) 良い例:
反例:
当然ですが、キーワードの大文字と小文字を統一し、インデント配置を使用すると、SQL がよりエレガントに見えます。 INSERT文は対応するフィールド名を示します(SQL標準およびエレガント) 反例:
良い例:
SQL 変更操作は、詳細な操作手順とロールバック計画を使用して、まずテスト環境で実行し、本番環境の前に確認する必要があります。 (SQL 後悔薬)
データベース テーブルを設計するときは、主キー、create_time、update_time の 3 つのフィールドを追加します。 (SQL 標準のエレガンス) 反例: テーブル「アカウント」を作成します( `name` varchar(255) DEFAULT NULL COMMENT 'アカウント名', `balance` int(11) デフォルト NULL コメント 'Balance', ) ENGINE=InnoDB AUTO_INCREMENT=1570068 DEFAULT CHARSET=utf8 ROW_FORMAT=REDUNDANT COMMENT='アカウントテーブル'; 良い例: テーブル「アカウント」を作成します( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主キーID', `name` varchar(255) DEFAULT NULL COMMENT 'アカウント名', `balance` int(11) デフォルト NULL コメント 'Balance', `create_time` datetime NOT NULL COMMENT '作成時刻', `update_time` datetime NOT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間', 主キー (`id`)、 キー `idx_name` (`name`) BTREE の使用 ) ENGINE=InnoDB AUTO_INCREMENT=1570068 DEFAULT CHARSET=utf8 ROW_FORMAT=REDUNDANT COMMENT='アカウントテーブル'; 理由: 1. 主キーを追加する必要があります。主キーのないテーブルは無意味です。 アリババ開発マニュアルにもこの点について言及されており、図に示されている。 SQL 文を記述した後、where、order by、group by の後の列を確認し、複数のテーブルに関連する列にインデックスが付けられているかどうかを確認し、結合されたインデックスを優先します。 (SQLパフォーマンスの最適化) 反例: 良い例:
重要なデータを変更または削除する前に、まずバックアップしてください。まずバックアップしてください。まずバックアップしてください。(SQL 後悔薬) データを変更または削除する場合は、SQL を実行する前に変更するデータをバックアップする必要があります。誤った操作をした場合、後で後悔する可能性があります。 where に続くフィールドのデータ型の暗黙的な変換に注意してください (SQL パフォーマンスの最適化) 反例:
良い例:
理由: 一重引用符が追加されていない場合、比較は文字列と数値の間で行われ、それらの型が一致しません。MySQL は暗黙的な型変換を実行し、比較する前にそれらを浮動小数点数に変換します。これにより、最終的にインデックスが無効になります。 すべての列を NOT NULL として定義するようにしてください (SQL 標準のエレガンス)
SQLを修正・削除するには、まずWHEREを書いて確認し、確認後にdeleteやupdateを追加する(SQL後悔薬) select * の代わりに select <特定のフィールド> を使用するなど、不要なフィールドの戻り値を減らす (SQL パフォーマンスの最適化) 反例:
良い例:
理由:
すべてのテーブルは Innodb ストレージ エンジンを使用する必要があります (SQL 標準エレガンス) Innodb は、トランザクション、行レベルのロック、優れた回復性、高同時実行性における優れたパフォーマンスをサポートします。したがって、特別な要件 (列ストレージ、ストレージ スペース データなど、Innodb が満たせない機能) がない限り、すべてのテーブルで Innodb ストレージ エンジンを使用する必要があります。 データベースとテーブルの文字セットはUTF8(SQL標準エレガント)を使用するように統一されています。 UTF8エンコードを統一的に使用する
式を保存する場合は、utf8mb4 を検討できます。 char の代わりに varchar を使用するようにしてください。 (SQLパフォーマンスの最適化) 反例:
良い例:
理由: まず、可変長フィールドは占有するストレージ スペースが少なくなるため、ストレージ スペースを節約できます。 フィールドの意味を変更したり、フィールドに追加のステータスを追加したりする場合は、フィールド注釈を適時に更新する必要があります。 (SQL は洗練されており、標準化されています) SQL はデータを変更し、トランザクションの開始 + コミットの習慣を身につけます (SQL 後悔薬) 良い例:
反例:
インデックスの命名は標準化する必要があります。主キーのインデックス名は pk_field name、一意のインデックス名は uk_field name、共通インデックス名は idx_field name です。 (SQL は洗練されており、標準化されています) WHERE句の列に対して関数変換や式計算は実行されません。 loginTime がインデックス化されていると想定します。 反例:
良い例:
変更または更新するデータが多すぎる場合は、バッチで実行することを検討してください。 反例:
良い例:
理由:
上記の内容が読者のプログラミング学習に役立つことを願っています。 MySQL の標準化と最適化に関する 21 のベスト プラクティスに関するこの記事は以上です。この記事はこれで終わりです。MySQL標準の最適化に関するより関連性の高いコンテンツについては、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Javascript Echarts 空気質マップ効果の詳細な説明
>>: Dockerイメージの作成Dockerfileとコミット操作
目次1. 二重連結リストとは何か2. 双方向リンクリストのカプセル化3. 双方向リンクリストの一般的...
概要データベースは通常、複数のトランザクションを同時に実行します。複数のトランザクションが、同じデー...
一般的な提案は、WHERE 条件のインデックスを作成することですが、これは実際には一方的です。インデ...
序文プロジェクトのニーズに応じて、Vue-touch を使用して、vue モバイル端末の左スワイプ編...
固定サイドバーを実装するにはJavaScriptを使用します。参考までに、具体的な内容は次のとおりで...
背景<br />フロントエンドを担当する学生は、ページが多すぎると煩雑になるため、開発プ...
W3C では、さまざまなタグの規定を設定するだけでなく、Web ページの作成者が実際に W3C 規...
1. SELECT句を使用して複数のテーブルをクエリするSELECT フィールド名 FROM tab...
目次1. 静的実装方法: 2. 第2のシミュレーション動的方法3. 3番目の動的データ方式4. 動的...
序文docker イメージを削除できません。docker docker imagesを確認すると、イ...
forループを使用してZabbixイメージをコンテナにインポートします。 n を `ls *.tar...
1 分で最初の Web ページを作成します。簡単な Web ページを作ってみましょう。ぜひフォローし...
目次機能コンポーネント子コンポーネントの分割ローカル変数v-show によるDOMの再利用キープアラ...
この記事では、淘宝虫眼鏡効果を実現するためのJavaScriptの具体的なコードを参考までに紹介しま...
この記事では、MySQL 8.0のダウンロードとインストールについてご紹介します。具体的な内容は以下...