[解決済み] なぜMongoDBではインデックスの方向が重要なのか?
疑問点
引用元 ドキュメント :
インデックスを作成する際、キーに関連付けられた数値はインデックスの方向を指定します。 したがって、常に1(昇順)または-1(降順)でなければなりません。 (降順) でなければなりません。方向は、単一のキーインデックスやランダムアクセス検索では重要ではありません。 しかし、複合インデックスでソートや範囲検索を行う場合は重要です。 レンジクエリを行う場合には重要です。
しかし、複合インデックスにおいてインデックスの方向が重要である理由は見当たりません。どなたか詳しい説明 (または例) をしていただけませんか?
どのように解決するのですか?
MongoDBは複合キーを何らかの方法で連結し、BTreeのキーとして使用します。
単体を探す場合 - ツリー内のノードの順番は関係ありません。
ノードの範囲を返す場合 - 互いに近い要素は、ツリーの同じ枝を下ることになります。範囲内のノードが近ければ近いほど、より早く取得することができます。
単一フィールドインデックスで - 順序は重要ではありません。もし昇順で近ければ、降順でも近づけるでしょう。
複合キーがある場合 - 順序が重要になり始める。
例えば、キーがAの昇順、Bの昇順の場合、インデックスは次のようになります。
行 A B 1 1 1 2 2 6 3 2 7 4 3 4 5 3 5 6 3 6 7 5 1
Aの昇順Bの降順のクエリは、行を返すためにインデックスの周りを順番通りに飛ぶ必要があり、より遅くなります。例えば、このクエリが返す行は
1, 3, 2, 6, 5, 4, 7
インデックスと同じ順序で範囲指定されたクエリは、単に正しい順序で行を順次返します。
BTreeでレコードを見つけるにはO(Log(n))の時間がかかります。レコードの範囲を順番に見つけることは、OLog(n) + k (kは返すべきレコードの数)だけです。
レコードが順番通りでない場合、コストはOLog(n) * kと同じくらいになる可能性があります。
関連
-
[解決済み] 配列フィールドが空でない MongoDB レコードを検索する
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] B "の印刷が "#"の印刷より劇的に遅いのはなぜですか?
-
[解決済み] Python 3で「1000000000000000 in range(1000000000000001)」はなぜ速いのですか?
-
[解決済み] インデックスを指定してリストから要素を削除する方法
-
[解決済み] MongoDBに "like "を使ってクエリを実行する方法
-
[解決済み] クラスター化インデックスと非クラスター化インデックスの実際の意味は何ですか?
-
[解決済み】データベースとしてのNoSQL(MongoDB) vs Lucene(またはSolr)【クローズド
-
[解決済み】MongoDBで、あるデータベースから別のデータベースにコレクションをコピーする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] テスト
-
[解決済み】MongoDBシェルですべてのコレクションを一覧表示するには?
-
[解決済み] MongoDB の個別集計
-
[解決済み] 同じデータベース内でコレクションをコピーする最も速い方法は何ですか?
-
[解決済み] mongodの書き込みに関するデフォルトの懸念はどのバージョンにありますか?
-
[解決済み] mongodb Failed: error connecting to db server: no reachable servers
-
[解決済み] MongoDBと同等ではない
-
[解決済み] mongodb aggregation sort
-
[解決済み】シェルスクリプトでmongoのコマンドを実行するには?
-
[解決済み】データベースとしてのNoSQL(MongoDB) vs Lucene(またはSolr)【クローズド