クエリ速度、ディスクストレージ、メモリ使用量に関して、MySQLでBTREE
インデックスを使用する場合の長所と短所は何ですか?
BTREE
は、昇順で簡単に反復できますか?BTREE
はどのようなクエリにメリットがありますか?BTREE
インデックスを使用するデメリットはありますか?ストレージエンジン(MyISAMまたはInnoDB)に関係なく、 BTREEs になると、次の特性を理解する必要があります。
mysqldump
ファイルとLOAD DATA INFILE
コマンドを介したデータのリロードは、インデックスの初期化/再編成に対処するためのソートメカニズムの使用を促進します(2012年10月26日の投稿: を参照してください)やや順不同の挿入に直面して? )InnoDBのBTREEに関しては、行データが存在するInnoDBの gen_clust_index のため、対応するMyISAMよりも膨らむ傾向があります。
InnoDBテーブルのPRIMARY KEYは、そのgen_clust_indexを直接指します。セカンダリインデックスには、常にPRIMARY KEYエントリが含まれます。セカンダリインデックスを使用するクエリを実行し、WHERE句にインデックスのない列がある場合、2つのインデックスルックアップを簡単に実行できます。これを念頭に置いて、クエリのWHERE句に必要なすべてのセカンダリインデックスがすべてのセカンダリインデックスにあることを確認する必要があります(別名 カバーするインデックス )。
何に比べて長所と短所? ドキュメント から:
index_type
一部のストレージエンジンでは、インデックスの作成時にインデックスタイプを指定できます。さまざまなストレージエンジンでサポートされているインデックスタイプの許容値を次の表に示します。複数の索引タイプがリストされている場合、索引タイプ指定子が指定されていないときの最初のタイプがデフォルトです。
Storage Engine Permissible Index Types
----------------------------------------
MyISAM BTREE
InnoDB BTREE
MEMORY/HEAP HASH, BTREE
NDB HASH, BTREE
Index_type句をSPATIAL INDEXと一緒に使用することはできません。
Bツリーインデックスに関して、Mysqlに固有のものはあまり多くないと思います。
Bツリーインデックスの主な考え方は、物理読み取りの数を最小限に抑えることです。データ構造がソートされるため、Bツリーインデックスは範囲スキャンに効果的に使用できます。シークはハッシュインデックスに比べてそれほど効果的ではありません。 Delete
sは断片化を引き起こし、シーケンシャルinsert
sは相対的に安価であり、非シーケンシャルinsert
sおよびupdate
sは非常に高価な場合があります。ただし、最新のRDMSは通常、適切なパフォーマンスでそれらを処理します。
基礎となるデータ構造から純粋にメリットを調べます。