問題タブ [compound-index]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
performance - 多くのパラメーターによる MongoDB フィルタリング (複合インデックスかどうか)
製品のカタログがあり、カテゴリ、価格、サイズ、色、重量などの多くのパラメータでフィルタリングしたい.
質問は索引付けについてです。
すべてのフィールドで複合インデックスを使用して、インデックスを作成したのと同じ順序でクエリを実行できます。しかし、サイズと色だけでフィルタリングし、次に価格と重量だけでフィルタリングする必要がある場合はどうすればよいでしょうか? パラメータが多すぎる可能性があるため、考えられるフィルタリングクエリごとに複合インデックスを作成するのはやり過ぎです。
それで、いくつかの検索の後、私は興味深いアプローチを見つけました
「正規化された属性」を使用することが提案されています。
mongo レコードは次のようになります。
次に、属性でインデックスを作成する必要があります。その後、次の方法でクエリを実行できます。
利点は次のとおりです。
- より小さいインデックス
- 検索の高速化
- 任意の数のパラメータ
- 成長しやすい
私が理解していなかったのは、各属性の数値を取得する方法です。それらは何らかの形で計算されていますか(md5のように)?または、別のコレクションを作成して、そこに各キー値番号を保存する必要がありますか? 「アイテム」コレクションをフィルタリングする必要があるたびに、最初にそこから数字を取得しますか?
そして、このアプローチについてどう思いますか?
更新: 数値の代わりに連結文字列を使用するとどうなりますか?
mysql - mysql 複合インデックスは個々のフィールドにもインデックスを付けますか?
次の MySQL/InnoDB テーブルがあります。両方の列の主キーとして複合インデックスを追加し、2 つの単一列インデックスも追加しました。複合インデックスを配置すると、単一列インデックスからパフォーマンスが向上しますか? または、それらをドロップした方がよいでしょうか?
それが役立つ場合、このテーブルの主な目的は前方インデックスであるため、このテーブルはINNER JOIN
、メイン レコード テーブルの id 列に record_id を指定して排他的に使用されます。
c# - C#で複合インデックスを作成する
1 つのキーが昇順で、2 つ目のキーが降順である複合インデックスを作成したいと考えています。
これどうやってするの?
ユーザーが選択したプロパティ名を含む文字列があります。
動作しません
mongodb - MongoDB 複合インデックスの使用
次の 2 つのキーを持つドキュメントがあるとします。
1)キー1
2) キー2
両方に複合インデックスを作成している場合..
key1.. のみに関連するクエリを実行する場合、上記のインデックスは使用されますか? または、key1専用の特定のインデックスも作成する必要がありますか?
ありがとう
javascript - Collection._ensureIndex が正しい順序でフィールドを渡すようにする
mongo インデックスのドキュメントには、複合インデックスの場合、フィールドの順序が非常に重要であると記載されています。インデックスは、フィールドの任意のプレフィックスを使用したクエリのみをサポートできます: http://docs.mongodb.org/manual/core/indexes/
Meteor は現在、サーバー側ensureIndex
と同様にMongoDB へのパススルーを備えています。Collection._ensureIndex
ただし、Javascript で引数を渡すとCollection._ensureIndex
、これらのフィールドは Javascript オブジェクトに変換されます。Mongo がそれらを同じ順序で読み取るという保証はありますか? そうでない場合、このインデックスを設定する正しい方法は何ですか?
これは、JS オブジェクトの保存方法に関係している可能性があります。それらは連想配列ですか、それともプロパティを順番に保持していますか?
ruby-on-rails-3 - MongoDB クエリとインデックスで結果をより速く取得する方法
Rails アプリを実行しており、mongoid を使用しています。Mongoid::Document
Rails アプリでアカウントを作成しました。
アカウント ドキュメントには大量のレコードがあります。クエリを高速化するために複合インデックスを追加しました。しかし、アプリケーションのパフォーマンスは悪いです。
クエリで説明しようとしましたが、indexOnly
属性がfalse
値として表示されています。
複合インデックスを作成する最良の方法を教えてください。
作成したクエリがインデックスを適切に使用していることを確認するにはどうすればよいですか?
これが私のクエリです
first_record = Account.where(column_1: 5, column_2: "xxxx", column_3: "xxxxxx", column_4: "xxxxxxxxxxx", column_5: "xxxxxxxxx")
first_record.explain()
=> {"cursor"=>"BtreeCursor provider_5_params_idx", "isMultiKey"=>false, "n"=>10320, "nscannedObjects"=>10320, "nscanned"=>10320, "nscannedObjectsAllPlans"=>10320, "nscannedAllPlans"=>10320, "scanAndOrder"=>false, "indexOnly"=>false, "nYields"=>317, "nChunkSkips"=>0, "millis"=>222464, "indexBounds"=>{"column_1"=>[[5, 5]], "column_2"=>[["xxxx", "xxxx"]], "column_3"=>[["xxxxx", "xxxxx"]], "column_4"=>[["pxxxx", "xxxxxxx"]], "column_5"=>[["xxxxxx", "xxxxxx"]]}, "allPlans"=>[{"cursor"=>"BtreeCursor provider_5_params_idx", "n"=>10320, "nscannedObjects"=>10320, "nscanned"=>10320, "indexBounds"=>{"column_1"=>[[5, 5]], "column_2"=>[["xxxx", "xxxx"]], "column_3"=>[["xxxx", "xxxx"]], "column_4"=>[["xxxx", "xxxxx"]], "column_5"=>[["xxxxx", "xxxxx"]]}}], "oldPlan"=>{"cursor"=>"BtreeCursor provider_5_params_idx", "indexBounds"=>{"column_1"=>[[5, 5]], "column_2"=>[["xxxx", "xxxx"]], "column_3"=>[["xxxxx", "xxxxx"]], "column_4"=>[["xxxx", "xxxxx"]], "column_5"=>[["xxxxx", "xxxxx"]]}}, "server"=>"xxxxxxxxx"}
また、次の方法でインデックスを作成しました。
db.account.ensureIndex({column_1:1,column_2:1,column_3:1,column_4:1,column_5:1}, {name:"provider_5_params_idx",background:true});
mysql - Mysql複合インデックスのカーディナリティはすべてのフィールドで同じではありません
mysql で複合インデックスを作成しました。使用するコマンドは次のとおりです。 DELIVER_SM(AID,STATUSID,RETRY_CNT) USING BTREE; 奇妙なのは、フィールドごとに異なるカーディナリティ値を取得したことです。それは正常ですか?他の複合インデックスも作成しましたが、各フィールドのカーディナリティ値は同じです。