ホームページ > データベース > mysql チュートリアル > MySQL クラスター化インデックスのソートが遅いケースの分析

MySQL クラスター化インデックスのソートが遅いケースの分析

黄舟
リリース: 2017-01-20 17:13:09
オリジナル
1476 人が閲覧しました

大量の選択を実行するときに mysiam エンジンを使用する必要があるのはなぜですか?特にインデックスがある場合

この記事は実際のアプリケーションに基づいて分析しています。


1. はじめに:

1W のデータ量を持つテーブルがさまざまな orderby 条件を実行し、クエリ時間が非常に長いという興味深い現象を見かけました。これは実際のアプリケーションでは実際の問題でしょうか。 ?なぜ?

MySQL クラスター化インデックスのソートが遅いケースの分析

2. 分析

a) 状況の説明:

1. 主キー ID と結合インデックス (id、ver) があり、前者を使用すると orderby クエリが遅くなります。 orderby クエリを非常に高速化します

2. 各行のデータ量が非常に多くなります

3. ID がメインのインデックスであり、select クエリのフィールドには ID のみが含まれるため、インデックスの対象にはなりません。物理ディスクにアクセスせずにインデックスからデータを取得できますが、必要なデータには到達しますが、高速であるはずのクエリが遅くなります。 MySQL インデックスのカバレッジ

b) 分析:

は間違いなく mysiam エンジンを使用していません。そうであれば、物理行のアドレスがインデックスが存在するため、実際に占有されるデータ量は大きくありません。ただし、innodb の場合は異なります。行のすべてのデータはメイン インデックスの下に保存されます。

c). 結論:

1. 主な理由: 使用される innodb エンジン

はクラスター化インデックスであり、主キー ID インデックスは行の他のデータもドラッグするため、ID に沿って並べ替える必要があります。各 ID をクエリして走査するには、多くの小さなブロックが必要です (mysiam の下にはそれほど多くのデータはありません。同じデータ ブロックを横断してより多くの行を走査するほうが高速です)

2. いくつかのフィールドがあります。家族連れが多く、データ量も比較的多い。各行のデータ量が多く、ディスクに保存するときに多くのブロックを占有します

3。この問題は当時の mysiam エンジンには存在しませんでした

d)。の選択が実行される場合は、mysiam エンジンを使用する必要があります

挿入と更新を実行する場合は innodb エンジンを使用します

詳細については、Mysql-index の概要を参照してください

3. 上記の条件を復元します。 、連続テーブルを作成し、変数を制御します。 エンジンが異なることを除き、残りの条件は同じで、主キー ID、主インデックス、結合インデックス (id、ver) です。

1. mysiam エンジンの新しいテーブル t7 を作成します

2. 10,000 個のデータをランダムに挿入します

MySQL クラスター化インデックスのソートが遅いケースの分析


3.

MySQL クラスター化インデックスのソートが遅いケースの分析

明らかに、時間の差はそれほど大きくなく、すべて同じ桁です。


4. innodb エンジンで新しいテーブル t8 を作成します

MySQL クラスター化インデックスのソートが遅いケースの分析

5. 10,000 個のデータをランダムに挿入します

MySQL クラスター化インデックスのソートが遅いケースの分析 上記のスクリプトに従ってステートメントを実行します。待機時間が非常に長いのはなぜですか?主キーインデックス ID を持つクラスター化インデックスであるため、主キーインデックスの作成時に大量の行データブロックが移動され、分割と移動に時間がかかります。

操作は、まず主キーインデックスIDを削除し、データを挿入してから主キー(ID)を追加して、主キーインデックス構造を作成します

MySQL クラスター化インデックスのソートが遅いケースの分析

6 クエリステートメントを実行して時間を確認します

明らかに、時差は大きく異なります。

理由: どちらのステートメントもクラスター化インデックスを使用していますが、主キーの範囲が多すぎるのに対し、ジョイント インデックスは下位にデータがなく、ブロック数が少なく、高速なトラバーサルを伴うセカンダリ インデックスです。 MySQL クラスター化インデックスのソートが遅いケースの分析

7. 全体的な分析では、主キーインデックスに従ってソートするのに時間がかかるのは t8 テーブル (innodb) のみです。残りは問題ありません

時間ソートの結論: innodb。 >mysiam

効率は27倍近くあります 何が問題ですか?

MySQL クラスター化インデックスのソートが遅いケースの分析1. 主な理由は、主キーに沿って並べ替える場合、クエリが複数のページにわたる多くのブロックにまたがり、時間が増加するためです。

2. 複数の長い文字フィールドがない場合、データ ブロックは大きくはないので、違いはそれほど大きくありません

たとえば、テーブル内の str1、str2、str3 フィールドを削除すると、クエリ時間は大幅に短縮されますが、違いは明らかではありません

上記は Mysql クラスター化インデックスのスローソートケース分析の内容です。その他の関連コンテンツ PHP 中国語 Web サイト (www.php.cn) にご注意ください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート