MongoDBにインデックスを作成する
MongoDBに郵便番号と住所のデータを登録しました。MongoDBに一括でデータを登録する(Bulk Inserts)
郵便番号をキーに住所を検索してみます。
住所検索プログラム
郵便番号が0591615のデータを検索して見ます。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from pymongo import Connection
from pymongo.objectid import ObjectId
import time
t1 = time.time()
#コネクション作成
con = Connection('192.168.1.245', 27017)
#コネクションからtestデータベースを取得
db = con.test
#testデータベースからyubinコレクションを取得
col = db.yubin
for data in col.find({u'zip_code': u'0591615'}):
print data['address']
con.disconnect()
print time.time() - t1, 'sec'
実行してみると・・・
c:\>python sample.py
北海道勇払郡厚真町高丘
0.253999948502 sec
c:\>python sample.py
北海道勇払郡厚真町高丘
0.305000066757 sec
c:\>python sample.py
北海道勇払郡厚真町高丘
0.205999851227 sec
12万件のデータ検索に0.25秒とそれなりに高速なのですが、Indexをつけて
さらに高速にしてみます。
Indexの付与
zip_codeに対してIndexを作成します。
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from pymongo import Connection
from pymongo import ASCENDING, DESCENDING
#コネクション作成
con = Connection('192.168.1.245', 27017)
#コネクションからtestデータベースを取得
db = con.test
#testデータベースからyubinコレクションを取得
col = db.yubin
col.create_index([("zip_code", ASCENDING)])
con.disconnect()
この後、同じ検索プログラムを実行すると・・・
c:\>python sample.py
北海道勇払郡厚真町高丘
0.0139999389648 sec
c:\>python sample.py
北海道勇払郡厚真町高丘
0.0130000114441 sec
c:\>python sample.py
北海道勇払郡厚真町高丘
0.0130000114441 sec
0.01秒まで縮まりました
すばらしい。