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

推薦する

Linux 上の MySQL 5.7 でパスワードを忘れる問題を解決する

1. 問題Linux 上の mysql5.7 のパスワードを忘れました2. 解決策• ステップ 1:...

Vue プロジェクトで SVG コンポーネントをパッケージ化して構成する手順

最近新しい会社に入社しました。プロジェクトに携わった後、タイトルアイコンが svg で作られていると...

Web 標準アプリケーション: Tencent QQ ホームページの再設計

Tencent QQのホームページがリニューアルされ、Webフロントエンド開発がますます注目を集めて...

Vueは虫眼鏡付きの検索ボックスを実装します

この記事では、Vueを使用して虫眼鏡付きの検索ボックスを実装する方法を紹介します。具体的な内容は次の...

MySQL テーブル内の重複データを検索して削除する方法の概要

時々、データベース テーブルに重複したデータが大量に保存されます。これらの重複データはリソースを浪費...

MySQL インデックスのクイックガイド

MySQL インデックスの確立は、MySQL の効率的な操作にとって非常に重要です。インデックスによ...

高性能なウェブサイトのための14のテクニック

オリジナル: http://developer.yahoo.com/performance/rule...

HTML のメタタグの簡単な比較

メタ タグは、ファイル情報を定義し、検索エンジンによる検索を容易にするために Web ページ ファイ...

Tomcat9 Windows サービスのインストールに関する詳細なチュートリアル

1. 準備1.1 service.bat を含む tomcat 圧縮パッケージをダウンロードします。...

MySQL 5.6 の「暗黙的な変換」によりインデックスが失敗し、データが不正確になる

背景SQL クエリを実行するときに、where 条件の vachar 型フィールドの単一引用符を削除...

CSS スタイルで一般的なグラフィック効果を示すサンプルコード

一般的な基本グラフィックと私が遭遇するいくつかの小さなアイコンについて簡単に説明します。以下は CS...

CSS ワールド - コード実践: 画像の Alt 情報の表示

ただし、デフォルトの src を持つ <img> 要素を使用してスクロール読み込み効果を...

CSS の境界線を通して三角形と矢印を実装するサンプルコード

1. CSS ボックスモデルボックスには、余白、境界線、パディング、コンテンツが含まれます境界線の接...

process.env.NODE_ENV 本番環境モードを設定する方法

始める前に、process.env.NODE_ENV にはデフォルトで開発と本番の 2 つの状態しか...

Filebeat を使用して Nginx ログを収集する方法

Nginx ログは、ユーザーの住所の場所や行動プロファイルなどを分析するために使用できます。Elas...