mysqlのソートの違い
MySQL のソート モードについて、浅いものから深いものまで詳しく説明します。それが MySQL のさまざまなソート モードの選択にどのような影響を与えるか、そしてソートを最適化する方法について説明します。
推奨コース: MySQL チュートリアル 。
# ソートはデータベースの基本機能であり、MySQL も例外ではありません。
ユーザーは、Order by ステートメントを使用して指定された結果セットを並べ替えることができます。実際、Order by ステートメントだけでなく、Group by ステートメントと Distinct ステートメントでも暗黙的に並べ替えが使用されます。この記事では、まず SQL がソートのコストを回避するためにどのようにインデックスを使用するかを簡単に紹介し、次にソートを実装するための MySQL の内部原理を紹介します。
みんなの次の質問に対する解決策:
MySQL はどこでソートを使用しますか?MySQL がソートを使用していることをどのように判断するか;
MySQL にはいくつかのソート モードがあり、その方法は何ですか? MySQL はさまざまなソート モードを選択します;
MySQL のソートと read_rnd_buffer_size の関係は何ですか、どのような状況で read_rnd_buffer_size を増やすとソートが最適化されますか;
MySQL がソートにディスクを使用するかどうかを判断する方法とその方法回避または最適化するには ディスクのソート;
ソート中に可変長フィールド (varchar) データがメモリに格納される方法と、5.7 での改善点;
この場合、どのような改善点があるかソート モードにはありますか?
sort_merge_pass とは正確には何ですか?ステータス値が大きすぎる場合、どのような問題が示されますか?どうすれば解決できますか?
MySQL がソートを使用する場合、どのような方法があるでしょうか?を使用して分析および最適化し、並べ替えを高速化できますか?
2. ソート
Explain を通じて MySQL 実行プランを表示すると、[Extra] 列に [Using filesort] が表示されることがよくあります。
ソートを回避するためにインデックスを使用できない SQL の場合、ユーザーのニーズに合わせてデータベース自体がソート機能を実装する必要があります。このとき、SQL 実行プランには「ファイルソートを使用する」と表示されます。ここでの filesort は、これがファイルのソートであることを意味するものではありません。実際、メモリのソートである可能性もあります。これは主に、sort_buffer_size パラメータと結果セットのサイズによって決まります。
実際、この状況は MySQL がソートを使用していることを示しています。 filesort の使用は、多くの場合、order by、group by、distinct、join などで表示されます。
MySQL の内部でソートを実装するには、通常のソート、最適化されたソート、および優先キューのソートという 3 つの主な方法があります。
CREATE TABLE t1(id int, col1 varchar(64), col2 varchar(64), col3 varchar(64), PRIMARY KEY(id),key(col1,col2)); SELECT col1,col2,col3 FROM t1 WHERE col1>100 ORDER BY col2;
これら 3 つの並べ替えの違いを見てください:
a. 従来の並べ替え
(1 ) .テーブル t1
(2) から WHERE 条件を満たすレコードを取得します。レコードごとに、レコードの主キー ソート キー (id、col2) を取り出し、ソート バッファ##に入れます。
#(3 ). ソートバッファーに条件を満たすすべての (id,col2) ペアを格納できる場合はソートし、そうでない場合はソートバッファーがいっぱいになったときにソートして一時ファイルに固めます。 (ソート アルゴリズムはクイック ソート アルゴリズムを使用します) (4). ソート中に一時ファイルが生成される場合は、マージ ソート アルゴリズムを使用して、一時ファイル内のレコードが正しい順序であることを確認する必要があります( 5). 条件を満たすすべてのレコードがソートに関与するまで上記のプロセスをループで実行します (6). ソートされた (id,col2) ペアをスキャンし、id を使用しますSELECT で返す必要がある列を取得します (col1,col2,col3)(7)。取得した結果セットをユーザーに返します。 上記のプロセスから、ファイルの並べ替えを使用するかどうかは、主に、並べ替えが必要な (id,col2) ペアを並べ替えバッファーが収容できるかどうかによって決まります。このバッファーのサイズは、sort_buffer_size パラメーターによって制御されます。さらに、並べ替えには 2 つの IO が必要です。1 つは (id,col2) を取得することであり、2 つ目は (col1、col2、col3) を取得することです。返された結果セットは、col2 で並べ替えられているため、ID の順序が狂っています。 ID で (col1、col2、col3) をフィッシングすると、大量のランダム IO が生成されます。 2 番目の MySQL 自体の最適化は、ID を取得する前に ID を並べ替えてバッファに入れることであり、このバッファのサイズはパラメータ read_rnd_buffer_size によって制御され、その後、順序立ててレコードを取得し、ランダム IO をシーケンシャル IO に変換します。b. 最適化された並べ替え
従来の並べ替え方法では、並べ替え自体に加えて 2 つの追加 IO が必要です。従来のソートと比較して、最適化されたソート方法により 2 回目の IO が削減されます。主な違いは、ソートバッファーが (id,col2) ではなく (col1,col2,col3) であることです。並べ替えバッファにはクエリに必要なフィールドがすべて含まれているため、並べ替えの完了後にデータを再度取得することなく直接返すことができます。この方法のコストは、同じサイズのソート バッファーに格納できる (col1、col2、col3) の数が (id、col2) よりも小さいことです。ソート バッファーが十分に大きくない場合、一時ファイルが作成される可能性があります。書き込む必要があるため、追加の IO が発生します。もちろん、MySQL には max_length_for_sort_data というパラメータが用意されており、ソートされたタプルが max_length_for_sort_data より小さい場合にのみ最適化されたソート方法が使用でき、それ以外の場合は従来のソート方法のみが使用できます。c. 優先キューのソート
最終的な並べ替え結果を取得するには、条件を満たすすべてのレコードを並べ替えてから返す必要があります。では、並べ替え方法の最適化と比較して、まだ最適化の余地はあるのでしょうか?バージョン 5.6 では、Order by limit M, N ステートメントが空間レベルで最適化され、ヒープ ソートを使用して実装される新しいソート方法である優先キューが追加されました。ヒープ ソート アルゴリズムの特性により、制限 M, N のソート問題を解決できます。ソートに参加するにはすべての要素が必要ですが、ソート バッファー スペースの M N タプルのみが必要です。M と N が小さいシナリオの場合、基本的には必要ありませんが、ソートバッファ不足によりマージソートに一時ファイルが必要になる場合があります。昇順の場合、大きな上部ヒープが使用され、最終ヒープの要素が最小 N 要素を形成します。降順の場合、小さな上部ヒープが使用され、最終ヒープの要素が最大 N 要素を形成します。
以上がmysqlのソートの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック

ルートとしてMySQLにログインできない主な理由は、許可の問題、構成ファイルエラー、一貫性のないパスワード、ソケットファイルの問題、またはファイアウォール傍受です。解決策には、構成ファイルのBind-Addressパラメーターが正しく構成されているかどうかを確認します。ルートユーザー許可が変更されているか削除されてリセットされているかを確認します。ケースや特殊文字を含むパスワードが正確であることを確認します。ソケットファイルの許可設定とパスを確認します。ファイアウォールがMySQLサーバーへの接続をブロックすることを確認します。

データ統合の簡素化:AmazonrdsmysqlとRedshiftのゼロETL統合効率的なデータ統合は、データ駆動型組織の中心にあります。従来のETL(抽出、変換、負荷)プロセスは、特にデータベース(AmazonrdsmysQlなど)をデータウェアハウス(Redshiftなど)と統合する場合、複雑で時間がかかります。ただし、AWSは、この状況を完全に変えたゼロETL統合ソリューションを提供し、RDSMYSQLからRedshiftへのデータ移行のための簡略化されたほぼリアルタイムソリューションを提供します。この記事では、RDSMysQl Zero ETLのRedshiftとの統合に飛び込み、それがどのように機能するか、それがデータエンジニアと開発者にもたらす利点を説明します。

MySQLには、無料のコミュニティバージョンと有料エンタープライズバージョンがあります。コミュニティバージョンは無料で使用および変更できますが、サポートは制限されており、安定性要件が低く、技術的な能力が強いアプリケーションに適しています。 Enterprise Editionは、安定した信頼性の高い高性能データベースを必要とするアプリケーションに対する包括的な商業サポートを提供し、サポートの支払いを喜んでいます。バージョンを選択する際に考慮される要因には、アプリケーションの重要性、予算編成、技術スキルが含まれます。完璧なオプションはなく、最も適切なオプションのみであり、特定の状況に応じて慎重に選択する必要があります。

1.正しいインデックスを使用して、データの量を削減してデータ検索をスピードアップしました。テーブルの列を複数回検索する場合は、その列のインデックスを作成します。あなたまたはあなたのアプリが基準に従って複数の列からのデータが必要な場合、複合インデックス2を作成します2。選択した列のみを避けます。必要な列のすべてを選択すると、より多くのサーバーメモリを使用する場合にのみサーバーが遅くなり、たとえばテーブルにはcreated_atやupdated_atやupdated_atなどの列が含まれます。

MySQLデータベースでは、ユーザーとデータベースの関係は、アクセス許可と表によって定義されます。ユーザーには、データベースにアクセスするためのユーザー名とパスワードがあります。許可は助成金コマンドを通じて付与され、テーブルはCreate Tableコマンドによって作成されます。ユーザーとデータベースの関係を確立するには、データベースを作成し、ユーザーを作成してから許可を付与する必要があります。

MySQLがテーブル構造を変更すると、メタデータロックが通常使用され、テーブルがロックされる可能性があります。ロックの影響を減らすために、次の測定値をとることができます。1。オンラインDDLでテーブルを使用できます。 2。バッチで複雑な変更を実行します。 3.小規模またはオフピーク期間中に操作します。 4. PT-OSCツールを使用して、より細かい制御を実現します。

MySQLはAndroidで直接実行できませんが、次の方法を使用して間接的に実装できます。Androidシステムに構築されたLightWeight Database SQLiteを使用して、別のサーバーを必要とせず、モバイルデバイスアプリケーションに非常に適したリソース使用量が少ない。 MySQLサーバーにリモートで接続し、データの読み取りと書き込みのためにネットワークを介してリモートサーバー上のMySQLデータベースに接続しますが、強力なネットワーク依存関係、セキュリティの問題、サーバーコストなどの短所があります。

MySQLデータベースパフォーマンス最適化ガイドリソース集約型アプリケーションでは、MySQLデータベースが重要な役割を果たし、大規模なトランザクションの管理を担当しています。ただし、アプリケーションのスケールが拡大すると、データベースパフォーマンスのボトルネックが制約になることがよくあります。この記事では、一連の効果的なMySQLパフォーマンス最適化戦略を検討して、アプリケーションが高負荷の下で効率的で応答性の高いままであることを保証します。実際のケースを組み合わせて、インデックス作成、クエリ最適化、データベース設計、キャッシュなどの詳細な主要なテクノロジーを説明します。 1.データベースアーキテクチャの設計と最適化されたデータベースアーキテクチャは、MySQLパフォーマンスの最適化の基礎です。いくつかのコア原則は次のとおりです。適切なデータ型を選択し、ニーズを満たす最小のデータ型を選択すると、ストレージスペースを節約するだけでなく、データ処理速度を向上させることもできます。
