検索
ホームページデータベースmysql チュートリアルMySQL ビッグ データ クエリのパフォーマンス最適化チュートリアル (写真)

MySQL のパフォーマンスの最適化には、テーブルの最適化とカラムの種類の選択が含まれます。テーブルの最適化は何に分類できますか? 1. 固定長と可変長を分離する。 2. 一般的に使用されるフィールドと一般的ではないフィールドを分離する。 3. 相関統計が必要な 1 対多のフィールドに冗長フィールドを追加する。与 I. テーブルの最適化と列の型の最適化:

1、固定長と ID int などの長さの分離は 4 バイトを占め、Char (4) を考慮します。 4 文字の長さも固定されており、時間、つまり各単位値が占めるバイト数も固定です。コアフィールドと一般的に使用されるフィールドは固定長で構築し、テーブルに配置する必要があります。 varchar、テキスト、BLOBなどの可変長さフィールドは、別のテーブルに配置され、プライマリキーを使用してコアテーブルに関連付けられているのに適しています。 commenty一般的に使用されるフィールドと珍しいフィールドを分離する必要があります。

3. 関連する統計を必要とする 1 対多フィールドに冗長フィールドを追加します。 : 以下の効果を見てください。 下 各セクションには、n 個の投稿があり、ページ情報の下の投稿数とホームページの下の投稿数が表示されます。

これはどうですか? BOARD テーブルに列が 2 つしかない場合は、ブロックを取得して、投稿テーブルを確認し、投稿数で投稿グループからカウント (*) を選択する必要があります。

2. 列の型の選択

1. フィールドの型の優先順位

s ' ' s ' を通して ‐ ‐ ‐ ‐ と一緒に、

>blob,text整数型:固定長、国・地域不問、文字セットの違いはありません。例: Tinyint 1,2,3,4,5 & lt;-& gt; では、スペースからの a、b、c、d、e

はすべて 1 バイトを占有しますが、ソートによって順序付けされます。前者の方が速いです。その理由としては、文字セットと照合順序セット (つまり、並べ替え規則) を考慮する必要があることが考えられます。タイムゾーンを考慮すると、SQL を書くときに都合が悪くなります。 `2018-08-08`;

enum は内部的に保持され、Table の変換 (ソートなどの操作のみが実行可能) になります。ディスク上) MySQL ビッグ データ クエリのパフォーマンス最適化チュートリアル (写真)

添付ファイル: 日付/時刻の選択に関して、マスターの明確な意見は、タイムスタンプを保存するために int unsgined not null を直接選択することです。 ️

tinyint()、固定長 1 バイト

2. 寛大にしないでください (smallint varchar(N) など)。

理由: 大きなバイトはメモリを無駄にし、速度に影響します。 MySQL ビッグ データ クエリのパフォーマンス最適化チュートリアル (写真)

年齢を例に取ると、 tinyint unsigned not null は 255 歳を保存できますが、これで十分です。 int を使用すると 3 バイトが無駄になります。

varchar(10) と varchar(300) に格納される内容は同じですが、varchar(300) はテーブル結合クエリ中により多くのメモリを消費します。

3. NULL() の使用は避けてください

理由: NULL はインデックス作成に適さないため、特殊文字でマークする必要があります。

実際にはディスク上でより多くのスペースを占有します (MySQL5.5 では null が改善されましたが、クエリはまだ不便です)

3. インデックス最適化戦略

1. インデックスの種類

1.1 B -tree インデックス

名前はBTREEインデックスで、大きな側面で使用されるバランスツリーですが、具体的な実装は少し異なります。たとえば、厳密に言うと、NDBエンジンはT-TREEを使用します

が、B-treeシステムは抽象化できます。 「ソートされた高速クエリ構造」として理解されます。

1.2 ハッシュ インデックス

デフォルトはメモリ テーブル内のハッシュ インデックスであり、ハッシュの理論的なクエリ時間計算量は O(1) です。

質問: ハッシュ検索は非常に効率的であるため、なぜハッシュ インデックスを使用しないのでしょうか?

答え:

1. データがディスク上に配置されている場合、例として主キーを ID として、ID が増加するにつれて、その ID に対応する行がランダムになります。ディスク上の場所はランダムになります。

2. 範囲クエリは最適化できません。

3. 接頭辞インデックスは使用できません。たとえば、btree では、フィールド列の値は "helloworld" であり、インデックス クエリ x=helloworld は当然インデックスを使用でき、x=hello もインデックスを使用できます。 (左側のプレフィックスインデックス)。

4. 並べ替えを最適化することはできません。

5. 行バッキングが必要です。つまり、インデックスを通じてデータの場所を取得するには、テーブルに戻ってデータを取得する必要があります。 2、BTREE インデックスのよくある誤解

2.1 次のような WHERE 条件にインデックスを追加します。 where cat_id = 3 and Price & gt; 3 番目の列 (100 元を超える商品) をクエリします。

誤解: cat_id とprice の両方にインデックスを追加します。

エラー: cat_id または Price インデックスのみを使用できます。これらは独立したインデックスであり、同時に使用できるのは 1 つだけです。

2.2 複数の列にインデックス (結合インデックス) を作成した後、どの列がクエリされてもインデックスは機能します

誤解: インデックスが複数列インデックスで機能するには、左側のプレフィックス要件を満たす必要があります。

インデックス (a、b、c) を例に挙げます (順序に関係していることに注意してください)

4. インデックスの実験 MySQL ビッグ データ クエリのパフォーマンス最適化チュートリアル (写真)

use out of using インデックス (a、b、c)例: select * from t4 where c1=3 and c2 = 4 and c4> 5 and c3 = 2 インデックスとは:

Select * from T4 where c1 = 3 and c2 = 4 and C4 & GT; : 4)

5. クラスター化インデックスと非クラスター化インデックス

Myisam と innodb エンジン、インデックス ファイルの類似点と相違点

Myisam: news.myd と new.myi の 2 つのファイルで構成されます。インデックス ファイルとデータ ファイルは別のものであり、非クラスター化インデックスと呼ばれます。プライマリ インデックスとセカンダリ インデックスはどちらも物理行 (ディスク上の場所) を指します。 MySQL ビッグ データ クエリのパフォーマンス最適化チュートリアル (写真)

innodb: インデックスとデータは一緒にクラスター化されているため、クラスター化インデックスになります。データ行は innodb のプライマリ インデックス ファイルに直接保存され、セカンダリ インデックスはプライマリ キー インデックスへの参照を指します。

注: innodb の場合:

1. 主キーインデックスはインデックス値を格納し、行データをリーフに格納します。

2. 主キーがない場合は、一意のキーが主キーとして使用されます。

3. 一意のない場合、システムは主キーとして内部 ROWID を生成します。

4. innodb と同様に、主キーのインデックス構造には、主キーの値と行データの両方が格納されます。この構造はクラスター化インデックスと呼ばれます。

クラスター化インデックス

利点: 主キーによるクエリエントリが比較的少ない場合、行を戻す必要はありません (データは主キーノードの下にあります)

欠点: 不規則なデータが挿入されると、頻繁なページ分割の原因になります

関連記事:

Mysql パフォーマンスの最適化

関連ビデオ:

MySQL 最適化ビデオ チュートリアル

以上がMySQL ビッグ データ クエリのパフォーマンス最適化チュートリアル (写真)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。