companys.drop_indexes() def query_with_index(): """对array like的关键字tags进行查询 """ st = time.clock() ppt(list(companys.find({"tags": {"$all": [1,2,3]}}))) print("query WITH index cost %.4f seconds." % (time.clock() - st,) ) def create_invalid_index(): """尝试添加违反规则的multikey index, 执行这个之前请先执行drop_index。 """ companys.create_index([("tags", pymongo.ASCENDING), ("city", pymongo.ASCENDING)]) def inser_invalid_document(): companys.insert({"tags": [1,2,3], "city": [1,2,3]}) if __name__ == "__main__": # companys.drop() initialize_collection() drop_index() # query_without_index() # create_index() # query_with_index() create_invalid_index() # 创建多重索引 inser_invalid_document() # pymongo.errors.WriteError: cannot index parallel arrays [city] [tags] # ppt(list(companys.list_indexes())) # 打印所有索引信息 client.close()
st = time.clock() doc = items.find_one({"item_id": 5}) print("find_one(item_id = 5), elapse %.4f seconds" % (time.clock() - st, )) st = time.clock() doc = items.find({"item_id": 500 * 1000}) print("find(item_id = 500,000), elapse %.4f seconds" % (time.clock() - st, )) st = time.clock() doc = items.find_one({"item_id": 500 * 1000}) print("find_one(item_id = 500,000), elapse %.4f seconds" % (time.clock() - st, )) if __name__ == "__main__": """本例子先生成一个1000,000条数据的collections, 然后分别查找位于前面和中间位置的数据。可以看出 在没有索引的情况下, 如果用find方法, 会扫描整个表。而用find_one方法, 则查找中间位置的数据会慢 很多。而一旦有了索引, 无论是用find还是find_one方法, 无论是数据的位置如何, 速度都非常快。 你可以用drop_index()函数删除索引, 重新进行演示 """ initialize_collection() find_method_example() find_one_method_example() create_index() query_with_index() # drop_index() client.close()