以下のQueryを例にする。
db.test_collection.find({ "content.a" : "aaaa", "content.sub_content.b" : "bbbb", "sex" : "male" }).sort({ "createdAt" : -1 }).limit(30)
Indexを作成するときはRDBと同じく以下を考慮する。
- 最初に検索条件、次に並べ替え順序(上記の場合、検索条件は"content.a", "content.sub_content.b", "sex"、並べ替え順序は"createdAt")
- find関数の実行速度を考慮し、検索条件は大きく検索対象を絞り込めるものから指定(上記の場合、"sex"(性別)はnullを含めても値が3種類しかないので指定を後回しにする)
- 並べ替え順序はクエリーが指定している順(上記の場合、並べ替えは"createdAt"の降順のみであるが、複数指定されている場合はその順番に指定)
実際の手順としては以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# mongoDBにログイン mongo > # 検索対象のデータベースに移動 > use test_database > # Queryの体感実行速度を確認 > db.test_collection.find({ "content.a" : "aaaa", "content.sub_content.b" : "bbbb", "sex" : "male" }).sort({ "createdAt" : -1 }).limit(30) > # Queryを実行計画を確認 > db.test_collection.find({ "content.a" : "aaaa", "content.sub_content.b" : "bbbb", "sex" : "male" }).sort({ "createdAt" : -1 }).limit(30).explain() > # 現在のindex一覧を確認 > db.test_collection.getIndexes() > # indexを作成 > db.test_collection.createIndex({ "content.a" : 1, "ohai_attributes.customer_info.matter_id: 1", "data_type" : 1, "createdAt" : -1 }) > # indexが作成できたことを確認 > db.test_collection.getIndexes() > # Queryの体感実行速度を確認 > db.test_collection.find({ "content.a" : "aaaa", "content.sub_content.b" : "bbbb", "sex" : "male" }).sort({ "createdAt" : -1 }).limit(30) > # Queryを実行計画を確認 > db.test_collection.find({ "content.a" : "aaaa", "content.sub_content.b" : "bbbb", "sex" : "male" }).sort({ "createdAt" : -1 }).limit(30).explain() |
投稿者プロフィール
最新の投稿
- AWS2021年12月2日AWS Graviton3 プロセッサを搭載した EC2 C7g インスタンスが発表されました。
- セキュリティ2021年7月14日ゼロデイ攻撃とは
- セキュリティ2021年7月14日マルウェアとは
- WAF2021年7月13日クロスサイトスクリプティングとは?