検索
ホームページデータベースmysql チュートリアル高性能MySqlの進化(1):データ型の最適化_前編

データベースのパフォーマンスチューニングのプロセスには、フィールド属性の設定が適切かどうか、インデックスの確立が適切かどうか、テーブル構造が適切かどうか、データベース/オペレーティングシステムの設定が正しいかどうかなど、多くの知識が必要になります。それぞれのトピック 各トピックはフィールドである場合があります。

私の意見では、データベースのパフォーマンスを向上させるための主要なテクノロジーの中で、フィールドの最適化は比較的難しく、パフォーマンスに非常に大きな影響を与えます。 MySQL は多くのデータ型をサポートしており、それぞれの型に独自の特性があるため、特定のデータ型を選択するときに、その型が最適であるかどうかを考慮せずに、使用可能な型を選択することがよくあります。具体的な型について説明する前に、まずデータ型を選択するための主な原則をいくつか見てみましょう:

a) 占有スペースが小さい型を選択するようにしてください
小さい型は、ディスク上とメモリ内で占有するスペースが少ないためです。クエリや並べ替えを行う場合、一時テーブルに必要なスペースは比較的小さくなります。データ量が比較的少ない場合には感じられないかもしれませんが、データ量が比較的多い場合には、この原則の重要性が明らかになることがあります。

たとえば、2,000 万件のレコードがある「製品情報」テーブルがあります。このテーブルには、「残りの製品数量」(COUNT) フィールドがあります。一般的には、SMALLINT (len: 16、範囲: 0-65535) です。このフィールドを表現するにはこれで十分ですが、設計プロセス中に BIGINT (len: 64 range: 0-18446744073709551615) を使用して表現すると、プログラムは正しく実行されるかもしれませんが、このフィールドは約 95M のディスク ストレージ容量 (64-. 16)/8*20,000,000 バイト) さらに、データの選択と並べ替えを行うと、このフィールドだけでメモリ消費量が 95M 増加し、データベースのパフォーマンスに必然的に影響します。

ここでできる限り小さくするという前提は、選択しようとしているタイプが将来のビジネス開発のニーズを確実に満たせるようにするためです。データ量が比較的少ない場合、テーブル構造の更新は非常に遅くて面倒な作業であるためです。大きい。

b) 単純/適切なタイプを選択するようにしてください

テーブルを選択して並べ替える場合、単純なタイプの方が消費する CPU クロック サイクルが少なくなることがよくあります。たとえば、MySql サーバーの場合、整数型の値の比較は文字列型の値の比較よりも簡単で高速であることが多いため、特定のテーブルを並べ替える必要がある場合は、並べ替えの基準として整数型を選択するようにしてください

c) フィールドを NOTNULL に設定してみてください

一般に、フィールドを明示的に NULL として指定しない場合、このフィールドはデータベース システムによって NULLABLE とみなされます。このシステムのデフォルト動作により、次の 3 つの問題が発生します。問題点
(1) Mysql サーバー自体のクエリ最適化機能が影響を受けます
(2) Mysql は追加のストレージ領域と null 値を持つフィールドの処理を必要とします
(3) null 値がインデックスの一部である場合、インデックスも影響を受けます

この原則はデータベースのパフォーマンスの向上に大きな役割を果たさないため、NULLABLE フィールドまたはインデックスが NULLABLE である場合、特に既存の DB スキーマを変更する必要はありません。ただし、新しく設計された DB やインデックスは可能な限りこの原則に従う必要があります。

データ型選択の原則を紹介した後、Mysql の一般的なデータ型と、パフォーマンスの最適化の観点から何に注意する必要があるかを紹介します。

・整数

Mysql の整数ファミリーのメンバーには、主に TINYINT(8 ビット)、SMALLINT(16 ビット)、MEDIUMINT(24 ビット)、INT(32 ビット)、または BIGINT(64 ビット) が含まれます。

符号付き整数の場合、これらの型の格納範囲は (-2(n-1), 2(n-1)-1) で、符号なし数値の場合、式の範囲は (0,2n-1) です。データベース、符号付き数値と符号なし数値は同じ記憶領域を占有するため、型を選択するときは、符号付きか符号なしかを考慮せず、数値の範囲のみを考慮することができます

MySQL では、整数を定義するときにそれを指定できますtype INT(10) などの幅。クライアント/CMD ラインの INT(10) の出力には違いがありますが、Mysql サーバーの観点から見ると、実際のストレージ容量/計算消費量の点では INT(10) と INT(32) の間に違いはありません。数値の範囲。 m

y y


🎜🎜 🎜🎜 のデータ型には主に Float (4BYTES)、Double (8bytes) があり、これら 2 つの型の記憶領域から必要な場合を除いて、避けるようにする必要があります。 10 進数タイプの使用🎜🎜10 進数タイプのフィールドを作成する場合、FLOAT(10,3) を使用して小数点の精度を指定できます。>=Mysql 5.0 でサポートされる最大精度は、小数点以下 65 桁までです。 🎜🎜データベースはバイナリ配列文字列を使用して小数点以下の数値を保存するため、必要な精度が高くなるほど、ストレージ容量/計算CPUクロックの消費量が増加する可能性があります。 🎜

小数を使用すると、より多くのストレージ領域と CPU リソースが消費される可能性があり、初期の Mysql バージョンでは、計算に小数 2 桁が含まれると精度が失われますが、金融分野での金額の保存など、多くの場合に必要です。多くの場合、ストレージのオーバーヘッドを削減し、精度を確保するために、小数点は整数に拡張されてデータベースに保存され、アプリケーション内で小数点が変換されて計算されます。たとえば、ユーザーのアカウント残高が 999.35 元のままである場合、その小数点は 999.35 元のままです。データに保存されている金額は 99935 ポイントです。銀行の処理プログラムは、99935 ポイントを取得した後、まずそれを 999.35 元に変換し、その後、対応する処理を実行します。一般に、この規則は比較的重要で複雑なタイプです。 MYSQL: MYSQL には主に VARCHAR と CHAR という 2 つの文字列タイプがあり、これらはストレージ エンジンによって決定され、ストレージ エンジンごとに異なる格納方法が使用されます。一般に、ストレージ エンジンの場合、ディスクとメモリの保存方法も異なります。ディスクとメモリ間でデータが転送される場合、ストレージ エンジンはデータの変換を担当します

VARCHAR

まず、それを指定する必要があります。 out MySQL は可変長を使用して VARCHAR を格納します。この方法は、固定長と比較して、「必要なだけ使用する」ストレージ スペース戦略を採用しています。この場合、特別なニーズがない場合は比較的スペースを節約できます。 、デフォルトの型として使用できます

VARCHAR が固定長を実現できる理由は、各 VARCHAR 値に 1 ~ 2 バイトの長さのインジケーターが追加されるためです。たとえば、「I Love Java」を保存する必要がある場合、基礎となる格納コンテンツは「11I Love Java」です。11 (1 バイト) は長さを表します。格納されるコンテンツの長さが 1000 の場合、長さインジケーターには 2 バイトが必要です。 2 バイトの最大値は 216 であるため、格納される文字列がこの長さを超えると、予期しない例外が発生します。この場合、このような超長い文字列を格納するには CLOB を使用する必要があります。

MYSQL のバージョンが異なると、VARCHAR フィールドの末尾のスペースの処理も異なります
バージョン>=5.0 末尾のスペースを保持します
バージョン
MYSQL 5.6 を例に挙げます:






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

高性能MySqlの進化(1):データ型の最適化_前編それは大きな利点があることがわかりました。 MySQL は通常、内部値を保持するために固定サイズのメモリ ブロックを割り当てるため、カラムが大きくなると、より多くのメモリが消費されます。これは、並べ替えや操作にメモリ内の一時テーブルを使用する場合に特に問題になります。ディスク一時テーブルを使用して並べ替える場合も同様に問題が発生します。

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

CHAR

CHAR 型と VARCHAR 型の最大の違いは、固定長であることです。同時に、VARCHAR と比較すると、主に次の特徴があります

1) すべての MYSQL バージョンで、末尾のスペースは切り捨てられます



2) 基本的に同じ長さのいくつかの短いフィールドに適した選択肢です、MD5 、ID 番号など
3) 頻繁に変更が必要なフィールドの場合、CHAR 型の方が効率的です
4) 一部の超短いフィールドの場合は、非常にスペースも節約されます。たとえば、「Y」または「N」を保存する場合、CHAR の使用には 1 バイトのみが必要ですが、VARCHAR の使用には 2 バイト (1 バイトの長さ + 1 バイトの値) が必要です

固定長 CHAR の場合、Mysql サーバーは次に従ってそれを使用します。十分な記憶領域を割り当てるために、定義された長さにはスペースが埋め込まれます。注意すべき点は、VARCHAR/CHAR の「スペースの充填」と「末尾のスペースの削除」の操作は MySQL サーバーによって実装されており、ストレージ エンジンとは何の関係もないことです高性能MySqlの進化(1):データ型の最適化_前編

上記は、高パフォーマンスの MySql の進化です ( 1): データ型 _ のコンテンツを最適化します。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。




声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
MySQLのライセンスは、他のデータベースシステムと比較してどうですか?MySQLのライセンスは、他のデータベースシステムと比較してどうですか?Apr 25, 2025 am 12:26 AM

MySQLはGPLライセンスを使用します。 1)GPLライセンスにより、MySQLの無料使用、変更、分布が可能になりますが、変更された分布はGPLに準拠する必要があります。 2)商業ライセンスは、公的な変更を回避でき、機密性を必要とする商用アプリケーションに適しています。

MyisamよりもInnodbを選びますか?MyisamよりもInnodbを選びますか?Apr 25, 2025 am 12:22 AM

Myisamの代わりにInnoDBを選択する場合の状況には、次のものが含まれます。1)トランザクションサポート、2)高い並行性環境、3)高いデータの一貫性。逆に、Myisamを選択する際の状況には、1)主に操作を読む、2)トランザクションサポートは必要ありません。 INNODBは、eコマースプラットフォームなどの高いデータの一貫性とトランザクション処理を必要とするアプリケーションに適していますが、Myisamはブログシステムなどの読み取り集約型およびトランザクションのないアプリケーションに適しています。

MySQLの外国キーの目的を説明してください。MySQLの外国キーの目的を説明してください。Apr 25, 2025 am 12:17 AM

MySQLでは、外部キーの機能は、テーブル間の関係を確立し、データの一貫性と整合性を確保することです。外部キーは、参照整合性チェックとカスケード操作を通じてデータの有効性を維持します。パフォーマンスの最適化に注意し、それらを使用するときに一般的なエラーを避けてください。

MySQLのインデックスのさまざまなタイプは何ですか?MySQLのインデックスのさまざまなタイプは何ですか?Apr 25, 2025 am 12:12 AM

MySQLには、B-Treeインデックス、ハッシュインデックス、フルテキストインデックス、空間インデックスの4つのメインインデックスタイプがあります。 1.B-Treeインデックスは、範囲クエリ、ソート、グループ化に適しており、従業員テーブルの名前列の作成に適しています。 2。HASHインデックスは、同等のクエリに適しており、メモリストレージエンジンのHASH_TABLEテーブルのID列の作成に適しています。 3。フルテキストインデックスは、記事テーブルのコンテンツ列の作成に適したテキスト検索に使用されます。 4.空間インデックスは、地理空間クエリに使用され、場所テーブルのGEOM列での作成に適しています。

MySQLでインデックスをどのように作成しますか?MySQLでインデックスをどのように作成しますか?Apr 25, 2025 am 12:06 AM

tocreateanindexinmysql、usethecreateindexstatement.1)forasinglecolumn、 "createdexidx_lastnameonemployees(lastname);" 2)foracompositeindexを使用して、 "createindexidx_nameonemployees(lastname、firstname);" 3); "3)、" 3)を使用します

MySQLはSQLiteとどのように違いますか?MySQLはSQLiteとどのように違いますか?Apr 24, 2025 am 12:12 AM

MySQLとSQLiteの主な違いは、設計コンセプトと使用法のシナリオです。1。MySQLは、大規模なアプリケーションとエンタープライズレベルのソリューションに適しており、高性能と高い並行性をサポートしています。 2。SQLiteは、モバイルアプリケーションとデスクトップソフトウェアに適しており、軽量で埋め込みやすいです。

MySQLのインデックスとは何ですか?また、パフォーマンスをどのように改善しますか?MySQLのインデックスとは何ですか?また、パフォーマンスをどのように改善しますか?Apr 24, 2025 am 12:09 AM

MySQLのインデックスは、データの取得をスピードアップするために使用されるデータベーステーブル内の1つ以上の列の順序付けられた構造です。 1)インデックスは、スキャンされたデータの量を減らすことにより、クエリ速度を改善します。 2)B-Tree Indexは、バランスの取れたツリー構造を使用します。これは、範囲クエリとソートに適しています。 3)CreateIndexステートメントを使用して、createIndexidx_customer_idonorders(customer_id)などのインデックスを作成します。 4)Composite Indexesは、createIndexIDX_CUSTOMER_ORDERONORDERS(Customer_Id、Order_date)などのマルチコラムクエリを最適化できます。 5)説明を使用してクエリ計画を分析し、回避します

データの一貫性を確保するために、MySQLでトランザクションを使用する方法を説明します。データの一貫性を確保するために、MySQLでトランザクションを使用する方法を説明します。Apr 24, 2025 am 12:09 AM

MySQLでトランザクションを使用すると、データの一貫性が保証されます。 1)StartTransactionを介してトランザクションを開始し、SQL操作を実行して、コミットまたはロールバックで送信します。 2)SavePointを使用してSave Pointを設定して、部分的なロールバックを許可します。 3)パフォーマンスの最適化の提案には、トランザクション時間の短縮、大規模なクエリの回避、分離レベルの使用が合理的に含まれます。

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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール