MySQL 使用仕様の概要

MySQL 使用仕様の概要

1. InnoDBストレージエンジンを使用する必要があります

CPU と IO のパフォーマンスが向上し、バックアップとテーブル ロックのメカニズムが改善され、統計とデバッグの効率が向上しました。

さらに、システムとして、InnoDB はさまざまな主要機能をサポートしていますが、その中で最も重要なのはトランザクション ログと行レベルのロックです。トランザクション ログには実際のデータベース トランザクションが記録されますが、さらに重要なのは、データ クラッシュの回復とロールバックです。

InooDB ベースの IO は、より安全なデータ保護と優れたパフォーマンスを提供できます。さらに、ほとんどの場合、行レベルのロックでは、ユーザーが書き込むデータのみをロックし、データの読み取りはブロックされないため、より高い同時実行パフォーマンスを実現できます。

2. データテーブルとデータフィールドに中国語のコメントを追加する必要がある

将来、新規ユーザーがより早く理解して慣れるのに便利になり、さらに読みやすくなります。同時に、ステータス フィールドには、削除の場合は 0、正常の場合は 1 などの列挙値がマークされます。

3. UTF8mb4文字セットを使用する必要があります

UTF8 はユニバーサル文字セットです。MB4 は UTF8 の拡張であり、絵文字などの新しい文字をサポートします。

4. ストアド プロシージャ、ビュー、トリガー、イベント、結合などの使用を禁止します。

高同時実行ビッグデータ インターネット サービスの場合、アーキテクチャ設計の考え方は、「データベース CPU を解放し、コンピューティングをサービス層に移す」ことです。データベースはストレージとインデックス作成に適しており、ビジネス層では CPU コンピューティングの方が合理的です。

5. 大きなファイルや写真を保存しない

人物の写真が多いと、ページングクエリの速度が大幅に低下します。以前は 1 秒以内に応答していましたが、写真フィールドを追加してからは、応答に約 4 ~ 5 秒かかります。
大きなファイルや写真はファイルシステムに保存されるため、URIはデータベースに保存する方がよい

6. テーブルには、自動増分主キーなどの主キーが必要です。

a) 主キーの増分とデータ行の書き込みにより、挿入パフォーマンスが向上し、ページ分割が回避され、テーブルの断片化が軽減され、スペースとメモリの使用量が改善されます。
b) 数値の主キーを使用します。データ型が短いほど、インデックスのディスク領域を効果的に削減し、インデックスのキャッシュ効率を向上させることができます。
c) 主キーのないテーブルを削除すると、ROW モードのマスター/スレーブ アーキテクチャでスタンバイ データベースがブロックされます。
d) ビジネス主キーをより頻繁に使用すると、データベースとテーブルを分割するのがより便利になります。

7. 外部キーは禁止されています。外部キーの整合性制約がある場合は、アプリケーション制御が必要です。

外部キーはテーブル間の結合を引き起こします。更新および削除操作には関連するテーブルが関係するため、SQL のパフォーマンスに大きな影響を与え、デッドロックを引き起こすこともあります。

8. フィールドはNOT NULLとして定義され、デフォルト値が提供される必要があります。

a) NULL 値を持つ列により、インデックス/インデックス統計/値の比較がより複雑になり、MySQL による最適化が困難になります。
b) Null このタイプのデータは、MySQL 内で特別に処理する必要があり、データベース レコード処理の複雑さが増します。同じ条件下で、テーブルに空のフィールドが多数ある場合、データベース処理のパフォーマンスが大幅に低下します。
c) NULL 値は、テーブルでもインデックスでも、より多くのストレージ スペースを必要とし、NULL 列の各行を識別するために追加のスペースが必要になります。
d) null を扱う場合、is null または is not null のみが使用でき、=、in、<、<>、!=、not in などの演算記号は使用できません。

たとえば、name!='nx' の場合、name が null のレコードが存在すると、クエリ結果には name が null のレコードは含まれません。

9. TEXT型とBLOB型は使用しない

ディスクとメモリのスペースがさらに無駄になります。不必要な大規模フィールドのクエリによってホット データが削除され、メモリ ヒット率が急激に低下し、データベースのパフォーマンスに影響を及ぼします。

10. 通貨を保存するのに小数点を使用しない

小数点を使用すると金額が一致しなくなる可能性が高くなりますので、整数を使用してください。

11. 携帯電話番号を保存するにはvarchar(20)を使用する必要があります

a) 市外局番や国番号の場合、+-()が表示されることがあります。
b) 携帯電話番号で数学演算を実行できますか?
c) VARCHAR はあいまいクエリをサポートできます。例: "138%"

12. ENUMは禁止されています。代わりにTINYINTを使用できます。

a) 新しいENUM値を追加するにはDDL操作が必要です
b) ENUM の実際の内部ストレージは整数です。文字列を定義したと思いましたか?

13. インデックス設計について

(1)1つのテーブル内のインデックスの数は5未満に制限することをお勧めします。

インデックスの数が多いほど良いというわけではありません。インデックスは効率を向上させることができますが、効率を低下させることもできます。

インデックスはクエリの効率を高めることができますが、挿入と更新の効率、さらには場合によってはクエリの効率も低下させる可能性があります。

MySQL オプティマイザがクエリを最適化する方法を選択する際、統合された情報に基づいて利用可能な各インデックスを評価し、最適な実行プランを生成します。クエリに同時に多くのインデックスを使用できる場合、MySQL オプティマイザが実行プランを生成する時間が長くなり、クエリのパフォーマンスも低下します。

(2)頻繁に更新され、差別化の度合いが低い属性にはインデックスを作成しないでください。

a) 更新によりB+ツリーが変更され、頻繁に更新されるフィールドのインデックス作成によりデータベースのパフォーマンスが大幅に低下します。
b) 「性別」のようにあまり差別化されていない属性の場合、インデックスを作成しても意味がありません。これではデータを効果的にフィルタリングできず、パフォーマンスは完全なテーブルスキャンと同様になります。

(3)複合インデックスを作成する場合、識別力の高いフィールドを先頭に配置する必要があります。

理由: データをより効果的にフィルタリングできる

14. SQLの使用仕様について

(1) INSERT INTO t_xxx VALUES(xxx)は禁止されています。挿入する列属性を指定する必要があります。

理由: フィールドを追加または削除すると、プログラムにバグが発生しやすくなります。

(2)WHERE条件の属性に関数や式を使用することは禁止されています。

理由: SELECT uid FROM t_user WHERE from_unixtime(day)>='2019-10-09' を実行すると、テーブル全体がスキャンされます。正しい書き方は次のとおりです: SELECT uid FROM t_user WHERE day>= unix_timestamp('2019-10-09 00:00:00')

(3)%で始まる否定クエリやあいまいクエリは禁止されている

理由:
a) 否定的なクエリ条件: NOT、!=、<>、!<、!>、NOT IN、NOT LIKE などの場合、テーブル全体がスキャンされます。
b) %で始まるファジークエリは完全なテーブルスキャンになります

(4)大きなテーブルではJOINクエリとサブクエリは禁止されています。

理由: 一時テーブルが生成され、メモリとCPUの消費量が増え、データベースのパフォーマンスに大きな影響を与えます。

(5)OR条件は禁止されており、INクエリに変更する必要がある。

理由: MySQL の古いバージョンの OR クエリでは、インデックスにヒットできません。インデックスにヒットできたとしても、クエリの最適化を実装するためにデータベースがより多くの CPU を消費する必要があるのはなぜでしょうか?

(6)アプリケーションはSQL例外を捕捉し、それに応じて処理する必要がある

以上がMySQL使用仕様のまとめの詳細内容です。MySQL使用仕様の詳細については、123WORDPRESS.COMの他の関連記事にも注目してください!

以下もご興味があるかもしれません:
  • 超詳細なMySQL使用仕様の共有
  • MySQLデータベースの使用仕様の概要
  • 経験豊富な人が、プロフェッショナルで標準化されたMySQL起動スクリプトの開発方法を紹介します。
  • MySQL開発標準と使用スキルの概要
  • MySQL データベース開発仕様 [推奨]
  • MySQL データベースの命名標準と規則
  • Mysql テーブル作成とインデックス使用仕様の詳細な説明
  • MYSQL データベースの命名と設計仕様
  • プロフェッショナルなMySQL開発設計仕様とSQL記述仕様

<<:  Linux ディレクトリ切り替え実装コード例

>>:  この記事はVueのライフサイクルを理解するのに役立ちます

推薦する

VMware Workstation と vSphere 間で仮想マシンを移行する (画像とテキスト)

1. Workstationで仮想マシンのハードウェアバージョンを変更するWorkstation ...

CentOS での MySQL ワークベンチのインストールと設定のチュートリアル

この記事では、MySQL Workbenchのインストールと設定のチュートリアルを参考までに紹介しま...

Windows 10 での Tomcat のインストールと展開に関する詳細なチュートリアル

目次1 Java環境の設定2 tomcatのインストールと展開Tomcat をインストールして展開す...

MySQL 8.0.22 のインストールと設定方法のグラフィックチュートリアル

この記事ではMySQL 8.0.22のインストールと設定について記録します。具体的な内容は以下のとお...

非常に詳細な MySQL8.0.22 のインストールと設定のチュートリアル

みなさんこんにちは。今日は、MySQL 8.0.22 のインストールと構成について学習します。注意深...

MySQL/MariaDB でピボット テーブルを実装する方法のサンプル コード

前回の記事では、Oracle でピボット テーブルを実装するいくつかの方法を紹介しました。今日は、同...

Windows 10 に MySQL 8.0.19 を zip 形式でインストールする詳細なチュートリアル

目次1.ダウンロード後、インストールしたいディレクトリに解凍します。 2. インストールディレクトリ...

HTML テーブルの行間隔を変更する方法の例

HTML テーブルを使用する場合、行間隔を変更する必要がある場合がありますが、余白、パディング、折り...

CocosCreator ソースコードの解釈: エンジンの起動とメインループ

目次序文準備行く!文章プロセスを開始するメインループまとめ要約する序文準備皆さんは、こんなことを考え...

Vue スキャフォールディング学習プロジェクト作成方法

1. 足場とは何ですか? 1. Vue CLI Vue CLI は、Vue.js をベースにした迅速...

HTML onfocus gain focus および onblur lose focus イベントの詳細な説明

HTML onfocus イベント属性定義と使用法onfocus 属性は、要素がフォーカスを受け取っ...

Windows および Linux で tomcat9 を介して war パッケージを手動で展開する方法

Windows 環境と Linux 環境では結果が異なります。ウィンドウズステップ 1: Maven...

DockerToolBox ファイルマウント実装コード

docker を使用すると、ファイルをマウントできない場合があります。これは、仮想マシンの共有フォル...

タブ切り替え効果を実現するJavaScript

この記事では、タブ切り替え効果を実現するためのJavaScriptの具体的なコードを参考までに紹介し...

シンプルな計算機を実装する JavaScript コード

この記事では、参考までに、簡単な計算機を実装するためのJavaScriptの具体的なコードを紹介しま...