MongoDB 3.x インデックス生成前後のexplain()結果を読む

はじめに MongoDB 3.0 から explain() の出力結果が変わり、読み解くのに時間がかかってしまいました。 今回はインデックスの生成前後で explain() の結果がどう変わるかを確認してみます。 環境 Mac OS X 10.10.3 MongoDB 3.0.2 MongoDB storage engine: mmapv1 (default) サンプルデータの準備 DBを用意 $ mongo > use sample_db switched to db sample_db サンプルデータ追加 とりあえず10万件のドキュメントを生成しておきます。 > for (var i=0; i < 100000; i++) { ... db.items.insert({ name: 'item_' + i, price: 100 + i }) ... } > db.items.count() 100000 インデックスが無い状態 itemsコレクションから119円の商品を探すクエリを実行します。 > db.items.find({price: 119}).explain("executionStats") { "queryPlanner" : { "plannerVersion" : 1, "namespace" : "sample_db.

jqコマンドを使ってみた

jqコマンドなるものがあるそうなので入れてみました。 jq - GitHub Pages 参考にさせて頂いたのはこちらの記事です。 jqコマンドが実は高性能すぎてビビッた話 jqはコマンドラインでJSONデータを扱うのに便利なコマンドです。 jq is a lightweight and flexible command-line JSON processor. インストール MacBook Air Mid 2011 Mac OS X 10.8.4 Homebrew 0.9.4 jq version 1.3 Mac なら homebrew を使うのが簡単そうです。 $ brew search jq jq $ brew install jq $ jq --version jq version 1.3 これで終わりです。簡単ですね。 ソースコードからのビルドやLinux, Windowsに関しては 公式ドキュメント をご覧ください。 サンプルのJSONを用意する JSONファイルを用意します。 jqの動きをざっと知りたいので簡素なJSONを。 $ cat sample.json {"items":[{"name":"kirino"},{"name":"kuroneko"}]} 改行もインデントも無いフラットなJSONです。