序文良い習慣はすべて宝物です。この記事は、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とコミット操作
一般的に、URL に基づいてファイルをダウンロードする場合、次の 2 つの解決策があります。 1. ...
SVG は、さまざまな利点があるため、近年広く使用されています。残念ながら、WeChat ミニプログ...
ペーパーレスの世界はまだ到来していませんが、書類や写真をスキャンすることで紙をなくす人が増えています...
以下にリストされているすべてのブログはオリジナルであり、独自にデザインされています。これらは、他者が...
シナリオ:クロールされたデータは、別のメインテーブルと同じ構造を持つデータテーブルを生成するため、マ...
序文metaはhtml言語のhead領域にある補助タグです。おそらく、これらのコードは不要だと思うで...
英語: IE では、リンク タグによって href が自動的に補完されます。 Ajax Link T...
目次序文Denoとは何ですか? Node.jsとの比較建築ESモジュール依存関係の管理TypeScr...
MYSQL5.7.17 が MAC で接続できない問題。SQLBench_community 6.3...
MySQL はリレーショナル データベース管理システムです。リレーショナル データベースは、すべて...
これにより、png ファイルのアップロードも不可能になりました (後で情報を調べたところ、レジストリ...
目次1. useStateフック2. useRefフック3. useRef と useState 4...
HTML5 で contentEditable 属性が導入されて以来、div は textarea ...
MySQL挿入時の8時間の時差の問題を解決する通常、jdbc の URL にはいくつかのパラメータを...
目次1. Vueリスナー配列2. vueが配列の変更を監視できない状況1. Vueリスナー配列Vue...