序文 MySQL の InnoDB エンジンがインデックスの保存に B+tree を使用する理由は、データのクエリ時にディスク IO 回数を最小限に抑えるためです。ツリーの高さはクエリのパフォーマンスに直接影響します。一般的に、木の高さは3階から4階が適しています。データベースのパーティション分割の目的は、ツリーの高さを制御することにもあります。では木の高さはどうやって測るのでしょうか?次の例は、木の高さを取得する方法を示しています。 サンプルデータの準備 テーブル作成ステートメントは次のとおりです。 テーブル `user` を作成します ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) 文字セット latin1 デフォルト NULL, `age` int(11) デフォルト NULL, 主キー (`id`)、 キー `name` (`name`), キー `age` (`age`) ) エンジン=InnoDB デフォルト文字セット=utf8 テーブルに 100 万件のレコードを挿入します。データは次のとおりです。 mysql> ユーザー制限 2\G から * を選択 ************************** 1. 行 **************************** id: 110000 名前: ab 年齢: 100 ************************** 2. 行 **************************** id: 110001 名前: ab 年齢: 100 セット内の 2 行 (0.00 秒) 関連するデータテーブルをクエリして木の高さを取得します MySQL 5.6 を例に、ツリーの高さを取得する方法を説明します。 まずpage_noを取得します mysql> SELECT b.name, a.name, index_id, type, a.space, a.PAGE_NO FROM information_schema.INNODB_SYS_INDEXES a, information_schema.INNODB_SYS_TABLES b WHERE a.table_id = b.table_id AND a.space <> 0 and b.name='test/user'; +-----------+----------+----------+---------+---------+---------+ | 名前 | 名前 | インデックス ID | タイプ | スペース | PAGE_NO | +-----------+----------+----------+---------+---------+---------+ | テスト/ユーザー | プライマリ | 22 | 3 | 6 | 3 | | テスト/ユーザー | 名前 | 23 | 0 | 6 | 4 | | テスト/ユーザー | 年齢 | 24 | 0 | 6 | 5 | +-----------+----------+----------+---------+---------+---------+ セット内の 3 行 (0.00 秒) page_no は、インデックス ツリー内のルート ページのシリアル番号です。その他の項目の意味については以下を参照してください。 ページサイズを再読み込み mysql> 'innodb_page_size' のようなグローバル変数を表示します。 +------------------+-------+ | 変数名 | 値 | +------------------+-------+ | innodb_ページサイズ | 16384 | +------------------+-------+ セット内の 1 行 (0.00 秒) 最後にインデックスツリーの高さを読み取ります $ hexdump -s 49216 -n 10 ./user.ibd 000c040 0200 0000 0000 0000 1600 000c04a PAGE_LEVEL が 0200 であることがわかります。これは、このセカンダリ インデックス ツリーの高さが 3 であることを意味します。次の 1600 はインデックスの index_id 値です。 16 進数の 16 は 10 進数の 22 に変換されます。この 22 は、まさに上記の主キーの index_id です。 この方法を使用して、他の 2 つのインデックスの高さを確認します。 $ hexdump -s 65600 -n 10 ./user.ibd 0010040 0100 0000 0000 0000 1700 001004a $ hexdump -s 81984 -n 10 ./user.ibd 0014040 0200 0000 0000 0000 1800 001404a 名前インデックスの高さは 2、年齢インデックスの高さは 3 であることがわかります。 インデックス構造に基づく推定 データベース サーバーへの権限がない場合。データベースのインデックス構造に基づいて木の高さを推定することもできます。 名前 インデックス 高さ 推定 非リーフ ノードのページあたりに保存されるインデックス エントリの数。各ページのサイズは 16k です。 name の値は ab です。 2バイトを占有します。各データ項目のサイズは 2+8=10 バイトです。各ページに保存できるインデックス項目の数は、16384 * 0.8 / 10 = 1310 です。 年齢指数身長推定 非リーフ ノードのページあたりに保存されるインデックス エントリの数。各ページのサイズは 16k です。 age は int 型です。 4バイトを占有します。各データ項目のサイズは 4+8=12 バイトです。各ページに保存できるインデックス項目の数は、16384 * 0.8 / 12 = 1092 です。 その他のツール チェックするための小さなツールもあります。 InnoDB テーブルスペース可視化ツール innodb_ruby 上記は、MySQL innodb の B+tree の高さを取得する例の詳細です。MySQL innodb の B+tree の詳細については、123WORDPRESS.COM の他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
>>: Vue-Routerのインストールプロセスと原理の詳細
フロントエンドエンジニアとして、IE は私たちにとって馴染み深いものであるはずです。設計案を実装する...
目次序文文章プリミティブ型プリミティブ値ラッパーオブジェクト物体コンストラクタ通常機能(関数)プリミ...
このチュートリアルでは、Linux ターミナルでドメイン名またはコンピューター名の IP アドレスを...
目次ヴィテ建てる構成vite.config.tsルーターtsタイプvue3 の知識設定小道具コンテク...
目次1. 一意の値をフィルタリングする2. 短絡評価2.1 シナリオ例3. ブール変換4. 文字列を...
目次プロジェクトを初期化するサーバーの作成クライアントを初期化するコンポーネントの記述ファイルアップ...
絶対位置決め方式: (1)親要素を相対配置に設定します。親要素の高さを指定しない場合は、左の子要素の...
初めての投稿ですので、間違いや問題点などありましたら、コメント欄で指摘していただければ、今後改善させ...
順序なしリストのアプリケーションネストコードをコピーコードは次のとおりです。 <!DOCTYP...
この記事では、従業員情報の追加と削除の機能を実装するためのjQueryの具体的なコードを参考までに共...
1. 背景Youzan の各 OLTP データベース インスタンスには、実行時間が特定のしきい値を超...
まず、top のいくつかのフィールドの意味を紹介します。 VIRT:仮想メモリ使用量1. プロセスが...
<br />原文: http://www.mikkolee.com/13私は最近、ver...
目次01 コンテナの本質とは何か? 02 Cgroupテクノロジーと名前空間テクノロジーの概要03 ...
目次1. 短絡判定2. オプション連鎖演算子 (?) 3. ヌル合体演算子 (??) 4. 終了関数...