序文良い習慣はすべて宝物です。この記事は、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とコミット操作
最近、クライアントのために印刷していたとき、ページのヘッダーを印刷するのではなく、表の内容だけを印刷...
Keepalive は Vue プロジェクトでのキャッシュによく使用され、基本的な要件を満たすのに非...
画像をダウンロード docker プル openjdkデータボリュームの作成java_appデータボ...
目次A. SpringbootプロジェクトのDockerデプロイメント1. Springbootプロ...
目次1. オプションの連鎖演算子 [? .】 2. 論理的な空の代入 (?? =) 3. 論理和代入...
最近、メンバーがテストできるようにプロジェクトをパッケージ化する必要がありますが、パッケージ化された...
目次関数フォーマットを即時実行関数を即座に実行する他の方法 – 式即時実行される関数はパラメータを取...
<br />Web ページによっては、サイズは大きくないように見えても開くのに非常に時間...
考えてみてください。なぜcss 、 javascriptのようにbodyタグの末尾ではなく、 hea...
mysql を構成するときに、構成ファイル内のデフォルトのストレージ エンジンを InnoDB に設...
序文:データベースパラダイムについてはよく耳にしていましたが、詳細まで理解したことはありませんでした...
目次1. 古いバージョンを削除する2. サーバーのカーネルタイプを確認し、適切なバージョンをダウンロ...
導入今日SQLを書いているときに、問題が発生しました。要件は、データを照会し、スコアと過去 1 週間...
基礎1. スキャフォールディングを使用してプロジェクトを作成し、開始する1.1 足場を設置する: n...
目次序文面接官は適切な質問をしていますか? § React は setState をどのように制御し...