検索
ホームページシステムチュートリアルLinuxMySQL の高パフォーマンス テーブルを設計する方法

MySQL の高パフォーマンス テーブルを設計する方法

Jan 07, 2024 pm 11:54 PM
linuxLinuxチュートリアルレッドハットLinuxシステムLinuxコマンドLinux 認定レッドハットリナックスLinuxビデオ

優れた論理設計と物理設計は、高パフォーマンスの基礎です。スキーマは、システムが実行するクエリ ステートメントに従って設計する必要があり、多くの場合、さまざまな要素を考慮する必要があります。

MySQL の高パフォーマンス テーブルを設計する方法

1. 最適化されたデータ型を選択します

MySQL は多くのデータ型をサポートしています。高いパフォーマンスを達成するには、正しいデータ型を選択することが重要です。

通常は小さい方が良いです

データ型が小さいほど、占有するディスク、メモリ、CPU キャッシュが少なくなり、処理に必要な CPU サイクルが少なくなるため、一般的に高速になります。

とにかくシンプルにしてください

単純なデータ型の操作では、通常、必要な CPU サイクルが少なくなります。たとえば、文字セットと照合ルール (照合順序) により、文字比較は整数比較よりも複雑になるため、整数演算は文字演算よりもコストがかかりません。

NULL

は避けてください。

クエリに NULL 列が含まれる場合、NULL 列によりインデックス、インデックス統計、および値の比較がより複雑になるため、MySQL の最適化がより困難になります。 NULL にできるカラムはより多くのストレージ領域を使用するため、MySQL での特別な処理が必要になります。 NULL 許容カラムにインデックスが付けられると、各インデックス レコードに追加のバイトが必要になります。MyISAM では、これによって固定サイズのインデックス (整数カラムが 1 つだけあるインデックスなど) が可変サイズのインデックスになることもあります。

もちろん例外もあります。たとえば、InnoDB は NULL 値の格納に別のビットを使用するため、スパース データのスペース効率が優れています。

1.整数型

数値には、整数と実数の 2 種類があります。整数を格納する場合は、TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT の整数型を使用できます。それぞれ 8、16、24、32、および 64 ビットのストレージ領域を使用します。

整数型にはオプションの **UNSIGNED ** 属性があります。これは、負の値が許可されないことを意味し、正の数の上限がおよそ 2 倍になります。たとえば、TINYINT.UNSIGNED は 0 ~ 255 の範囲を格納できますが、TINYINT の格納範囲は -128 ~ 127 です。

符号付きタイプと符号なしタイプは同じ記憶領域を使用し、同じパフォーマンスを有するため、実際の状況に応じて適切なタイプを選択できます。

あなたの選択により、MySQL がメモリとディスクにデータを保存する方法が決まります。ただし、整数計算では、32 ビット環境であっても、通常、64 ビット BIGINT 整数が使用されます。 (計算に DECIMAL または DOUBLE を使用する一部の集計関数は例外です)。

MySQL では、INT(11) などの整数型の幅を指定できますが、これはほとんどのアプリケーションにとって無意味です。これは、値の正当な範囲を制限するものではなく、MySQL の一部の対話型ツール (MySQL コマンドなど) を指定するだけです。 line client end) を使用して文字数を表示します。保存と計算の目的では、INT(1) と INT(20) は同じです。

2.実数型

実数とは、小数部分を持つ数値です。ただし、DECIMAL は小数部分を格納するためだけでなく、BIGINT より大きい整数を格納するためにも使用できます。

FLOAT 型と DOUBLE 型は、標準の浮動小数点演算を使用した近似計算をサポートします。

DECIMAL タイプは、正確な小数を格納するために使用されます。

浮動小数点型と DECIMAL 型の両方で精度を指定できます。 DECIMAL 列の場合、小数点の前後に許可される最大桁数を指定できます。これは列のスペース消費に影響します。

浮動小数点カラムに必要な精度を指定する方法は数多くありますが、これにより MySQL は別のデータ型を選択したり、格納時に値を四捨五入したりすることになります。これらの精度の定義は標準ではないため、精度ではなくデータ型のみを指定することをお勧めします。

浮動小数点型は、同じ範囲に値を格納する場合、通常、DECIMAL よりも使用するスペースが少なくなります。 FLOAT は 4 バイトのストレージを使用します。 DOUBLE は 8 バイトを占有し、FLOAT よりも精度が高く、範囲も広くなります。整数型と同様に、選択できるのはストレージ タイプだけです。MySQL は内部浮動小数点計算の型として DOUBLE を使用します。

追加のスペースと計算オーバーヘッドが必要となるため、小数の正確な計算を実行する場合にのみ DECIMAL を使用するようにしてください。ただし、データが比較的大きい場合は、DECIMAL の代わりに BIGINT を使用することを検討し、保存する通貨単位に小数点以下の桁数に応じた対応する倍数を掛けます。

3.文字列型

VARCHAR

  • 可変長文字列の格納に使用され、長さは 65535
  • までサポートされます。
  • 文字列の長さを記録するには、1 バイトまたは 2 バイトの追加バイトを使用する必要があります。
  • 最適な条件: 文字列の最大長が平均長よりはるかに長く、更新はまれです

文字

    固定長、長さの範囲は 1 ~ 255
  • 最適な用途: 非常に短い文字列、または同じ長さに近いすべての値、頻繁に変更される値の保存

寛大さは賢明ではありません

VARCHAR(5) と VARCHAR(200) を使用して「hello」を格納する場合のスペース オーバーヘッドは同じです。では、短い列を使用することには何か利点があるのでしょうか?

大きな利点があることがわかりました。 MySQL は通常、内部値を保持するために固定サイズのメモリ ブロックを割り当てるため、カラムが長いほど多くのメモリを消費します。これは、並べ替えや操作にメモリ内の一時テーブルを使用する場合に特に問題になります。ディスク一時テーブルを使用して並べ替える場合も同様に問題が発生します。

したがって、最善の戦略は、本当に必要なスペースのみを割り当てることです。

4.BLOB 型と TEXT 型

BLOB と TEXT はどちらも大量のデータを格納するように設計された文字列データ型で、それぞれバイナリ モードと文字モードで格納されます。

他の型とは異なり、MySQL は各 BLOB 値と TEXT 値を独立したオブジェクトとして扱います。ストレージ エンジンは通常、保存時に特別な処理を実行します。 BLOB 値と TEXT 値が大きすぎる場合、InnoDB はストレージに専用の「外部」ストレージ領域を使用します。このとき、各値は行に 1 ~ 4 バイトを格納する必要があります。ストレージ領域には実際の値が格納されます。

BLOB と TEXT の唯一の違いは、BLOB 型は照合規則や文字セットなしでバイナリ データを格納するのに対し、TEXT 型には文字セットと照合規則があることです。

5. 日付と時刻のタイプ

ほとんどの場合、このタイプに代わるものはないため、何が最善の選択であるかについては疑問の余地はありません。唯一の問題は、日付と時刻を保存するときに何をする必要があるかです。 MySQL は、DATE TIME と TIMESTAMP という 2 つの類似した日付タイプを提供します。

ただし、現在はタイムスタンプを保存する方法を推奨しているため、ここでは DATE TIME と TIMESTAMP についてはあまり説明しません。

6.その他のタイプ

6.1 識別子の選択

最小のデータ型は、値範囲のニーズを満たし、将来の拡張の余地を確保できるという前提で選択する必要があります。

  • 整数型

整数は高速で AUTO_INCREMENT を使用できるため、通常、ID 列には最適な選択です。

  • ENUM および SET タイプ

EMUM タイプと SET タイプは、一般に ID 列には適切な選択ではありませんが、固定された状態またはタイプのみを含む一部の静的な「定義テーブル」には適している場合があります。 ENUM 列と SET 列は、注文状況、製品タイプ、人の性別などの固定情報を格納するのに適しています。

  • 文字列型

可能であれば、文字列型を ID 列として使用することは避けてください。文字列型はスペースを消費し、一般に数値型よりも遅いためです。

MDS()、SHAl()、または UUID() によって生成される文字列など、完全に「ランダム」な文字列にもさらに注意を払う必要があります。これらの関数によって生成された新しい値は、広い領域に任意に分散されるため、INSERT ステートメントや一部の SELECT ステートメントが非常に遅くなる可能性があります。 UUID 値が保存されている場合は、「-」記号を削除する必要があります。

6.2 特殊な型のデータ

一部のタイプのデータ ウェルは、組み込みタイプと直接一致しません。キロ秒精度の低いタイムスタンプは 1 つの例です。別の例は 1Pv4 アドレスです。IP アドレスの保存には VARCHAR(15) 列がよく使用されますが、実際には文字列ではなく 32 ビットの符号なし整数です。住所を小数点を使用して 4 つのセグメントに分けて表現しているのは、読みやすくするためです。したがって、IP アドレスは符号なし整数として保存する必要があります。 MySQL は、これら 2 つの表現方法の間で変換するための INET_ATON() 関数と INET_NTOA() 関数を提供します。

2. テーブル構造の設計

1. パラダイムとアンチパラダイム

通常、特定のデータを表す方法は、完全に正規化されたものから完全に非正規化されたものまで、またその 2 つの間の妥協点まで数多くあります。正規化されたデータベースでは、各ファクトは 1 回だけ出現します。対照的に、非正規化データベースでは、情報は冗長であり、複数の場所に保存される可能性があります。

パラダイムの長所と短所

パフォーマンスの向上を考慮する場合、特に書き込み集中型のシナリオでは、スキーマを正規化することが推奨されることがよくあります。

  • 正規化された更新操作は、通常、非正規化された操作よりも高速です。
  • データが適切に正規化されている場合は、重複データがほとんどまたはまったくないため、変更する必要のあるデータが少なくなります。
  • 正規化されたテーブルは通常、サイズが小さくメモリへの適合性が高いため、操作がより高速に実行されます。
  • 冗長データが少ないということは、リスト データを取得するために必要な DISTINCT または GROUP BY ステートメントが少なくなることを意味します。

アンチパラダイムの長所と短所

関連テーブルが必要ない場合、テーブルがインデックスを使用していない場合でも、ほとんどのクエリの最悪のケースはテーブル全体のスキャンになります。データがメモリよりも大きい場合、ランダムな I/0 が回避されるため、これは連想型よりもはるかに高速になる可能性があります。

個々のテーブルでは、より効率的なインデックス作成戦略を使用することもできます。

正規化と非正規化の混合

実際のアプリケーションでは、多くの場合、これらを混合する必要があり、部分的に正規化されたスキーマ、キャッシュ テーブル、およびその他の技術が使用される場合があります。

パフォーマンスの優先順位など、冗長なフィールドをテーブルに適切に追加しますが、複雑さが増します。テーブル結合クエリを回避できます。

シンプルで使い慣れたデータベース パラダイム

<br> 第一正規形 (1NF): フィールド値はアトミックであり、分割できません (すべてのリレーショナル データベース システムは第一正規形を満たします);<br> 例: 名前フィールド。姓と名が完全に一致します。姓と名が区別される場合は、2 つの独立したフィールドを設定する必要があります。

第 2 正規形 (2NF): テーブルには主キーが必要です。つまり、データの各行は一意に区別できます。
注: 最初に最初の正規形が満たされる必要があります;

第 3 正規形 (3NF): テーブルには、他の関連テーブルの非キー フィールドに関する情報を含めることはできません。つまり、データ テーブルに冗長フィールドを含めることはできません。 注: 最初に第 2 正規形が満たされる必要があります;

2. テーブルフィールドの精度は低くなります

    I/O効率的
  • 個別のフィールドは保守が簡単です
  • シングルテーブル 1G ボリューム 500W の評価
  • 1 行は 200Byte を超えてはなりません
  • 単一テーブル内の INT フィールドは 50 個以下です
  • 単一テーブル内の CHAR(10) フィールドは 20 個までです
  • 単一テーブル内のフィールド数は 20 以内に制御することをお勧めします
  • TEXT/BLOB を分割すると、TEXT 型の処理パフォーマンスは VARCHAR よりも大幅に低下するため、ハード ディスク一時テーブルの強制生成により多くのスペースが無駄になります。

以上がMySQL の高パフォーマンス テーブルを設計する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はLinux就该这么学で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Linux管理者の給与はいくらですか?Linux管理者の給与はいくらですか?Apr 17, 2025 am 12:24 AM

Linux管理者の平均年salは、米国で75,000〜95,000ドル、ヨーロッパでは40,000〜60,000ユーロです。給与を増やすには、次のことができます。1。クラウドコンピューティングやコンテナテクノロジーなどの新しいテクノロジーを継続的に学習します。 2。プロジェクトの経験を蓄積し、ポートフォリオを確立します。 3.プロフェッショナルネットワークを確立し、ネットワークを拡大します。

Linuxの主な目的は何ですか?Linuxの主な目的は何ですか?Apr 16, 2025 am 12:19 AM

Linuxの主な用途には、1。Serverオペレーティングシステム、2。EmbeddedSystem、3。Desktopオペレーティングシステム、4。開発およびテスト環境。 Linuxはこれらの分野で優れており、安定性、セキュリティ、効率的な開発ツールを提供します。

インターネットはLinuxで実行されますか?インターネットはLinuxで実行されますか?Apr 14, 2025 am 12:03 AM

インターネットは単一のオペレーティングシステムに依存していませんが、Linuxはその上で重要な役割を果たしています。 Linuxは、サーバーやネットワークデバイスで広く使用されており、安定性、セキュリティ、スケーラビリティに人気があります。

Linux操作とは何ですか?Linux操作とは何ですか?Apr 13, 2025 am 12:20 AM

Linuxオペレーティングシステムのコアは、コマンドラインインターフェイスで、コマンドラインを介してさまざまな操作を実行できます。 1.ファイルおよびディレクトリ操作は、ファイルとディレクトリを管理するために、LS、CD、MKDIR、RM、その他のコマンドを使用します。 2。ユーザーおよび許可管理は、useradd、passwd、chmod、その他のコマンドを介してシステムのセキュリティとリソースの割り当てを保証します。 3。プロセス管理は、PS、Kill、およびその他のコマンドを使用して、システムプロセスを監視および制御します。 4。ネットワーク操作には、Ping、Ifconfig、SSH、およびネットワーク接続を構成および管理するためのその他のコマンドが含まれます。 5.システムの監視とメンテナンスは、TOP、DF、DUなどのコマンドを使用して、システムの動作ステータスとリソースの使用を理解します。

Linuxエイリアスを使用したカスタムコマンドショートカットで生産性を高めますLinuxエイリアスを使用したカスタムコマンドショートカットで生産性を高めますApr 12, 2025 am 11:43 AM

導入 Linuxは、柔軟性と効率性により、開発者、システム管理者、およびパワーユーザーが好む強力なオペレーティングシステムです。しかし、頻繁に長く複雑なコマンドを使用することは退屈でERです

Linuxは実際に何に適していますか?Linuxは実際に何に適していますか?Apr 12, 2025 am 12:20 AM

Linuxは、サーバー、開発環境、埋め込みシステムに適しています。 1.サーバーオペレーティングシステムとして、Linuxは安定して効率的であり、多くの場合、高電流アプリケーションの展開に使用されます。 2。開発環境として、Linuxは効率的なコマンドラインツールとパッケージ管理システムを提供して、開発効率を向上させます。 3.埋め込まれたシステムでは、Linuxは軽量でカスタマイズ可能で、リソースが限られている環境に適しています。

Linuxで倫理的ハッキングを習得するための必須ツールとフレームワークLinuxで倫理的ハッキングを習得するための必須ツールとフレームワークApr 11, 2025 am 09:11 AM

はじめに:Linuxベースの倫理的ハッキングでデジタルフロンティアを保護します ますます相互に接続されている世界では、サイバーセキュリティが最重要です。 倫理的なハッキングと浸透テストは、脆弱性を積極的に特定し、緩和するために不可欠です

Linuxの基本を学ぶ方法は?Linuxの基本を学ぶ方法は?Apr 10, 2025 am 09:32 AM

基本的なLinux学習の方法は次のとおりです。1。ファイルシステムとコマンドラインインターフェイス、2。LS、CD、MKDIR、3。ファイルの作成と編集などのファイル操作を学習するマスター基本コマンド、4。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境