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のライフサイクルを理解するのに役立ちます

推薦する

MySQL 主キー ID を生成する方法 (自己増分、一意、不規則)

目次1. uuid関数を使用して、一意かつ不規則な主キーIDを生成します。 2. idの自動成長1....

VMware WorkStation 14 pro インストール Ubuntu 17.04 チュートリアル

この記事では、VMware Workstation14 ProにUBuntu17.04をインストール...

vue3 における vuex と pinia の落とし穴

目次導入インストールと使用方法文章の相違点と類似点の簡単な比較VuexとPiniaの長所と短所Pin...

Pythonの関数知識についての簡単な説明

目次関数パラメータの2つの主要なカテゴリ位置パラメータ可変長パラメータ名前空間要約する関数パラメータ...

BFCとは何ですか? CSS 疑似要素を使用してフロートをクリアする方法

BFCコンセプト:ブロック フォーマット コンテキストは、BFC 内の要素を外部の要素から分離する独...

Docker Swarm サービス オーケストレーション コマンドの詳細な説明

1. はじめにDocker には、タスクを構成する複数の Docker コンテナをオーケストレーショ...

nginx をベースにリロードなしでアップストリーム サーバーの動的な自動起動と停止を実装する方法

目次1. Consulクラスタをデプロイする1. 準備3. Consulクラスタを作成する4. 管理...

SQL文のANDとORの実行順序で発生する問題

質問昨日、データベースSQLを書いているときに問題が発生しました。問題の根本は、SQL ステートメン...

MySQL 学習データベースバックアップの詳細な説明

目次1.DB、DBMS、SQL 2. データベースの特徴3. SQL分類4. MySQLを起動および...

VueプロジェクトでReactを書く方法の詳細

jsx/tsxファイルを直接作成できます今回のプロジェクト構成は以下のとおりです。 vueファイルで...

Win7 システムでの MySQL 5.7.11 の詳細なインストール チュートリアル

オペレーティング システム: Win7 64 ビット Ultimate Edition MySQL ...

コンテンツタイプの説明、つまりHTTPリクエストヘッダーのタイプ

コンテンツ タイプについて学ぶには、まずそれが何であるか、そして何に使用されるかを知る必要があります...

MySQL query_cache_type パラメータと使用方法の詳細

MySQL クエリ キャッシュを設定する目的は次のとおりです。クエリ結果をキャッシュしておくと、次回...

CentOS 7 でソースコードから Openssh をインストールする方法

環境: CentOS 7.1.1503 最小インストール依存パッケージをダウンロードします: yum...

MySQL接続クエリにおけるととwhereの違いの簡単な分析

1. テーブルを作成する テーブル「学生」を作成( `id` int(11) NULLではない、 `...