Mongodb花了太多时间找到记录

时间:2017-02-07 08:38:54

标签: mongodb mongodb-query

我在localhost上有mongodb,在数据库中我有9千万条记录。当我通过db.emails.find({"name":"example"})搜索任何记录时,获得结果需要很长时间。有什么方法可以提高mongodb的速度吗?

2 个答案:

答案 0 :(得分:3)

name字段

创建index
db.emails.createIndex( { name: 1} )

如果您没有字段索引,那么mongodb必须在执行查询时执行集合扫描,即扫描集合中的每个文档以检查name字段的值匹配您的查询。另一方面,此索引仅存储name字段的有序值,可以快速检查。

索引键有限制。索引条目的总大小必须小于1024字节。但是,如果要搜索字符串内容的查询,则可以使用文本索引:

db.emails.createIndex( { name: "text"} )

此外,如果您要搜索完全匹配,则可以使用散列索引:

db.emails.createIndex( { name: "hashed" })

答案 1 :(得分:0)

通常为了加速mongodb查询,可以做的是准备一个组合索引。

在您的情况下,由于它是电子邮件地址,我建议您做的是将邮件作为id并使用不区分大小写的正则表达式执行搜索。例如,如果您希望拥有gmail帐户的每个人都可以执行类似

的搜索

using VMware.Vim; ... VimClient client; string serverUrl = "..." client.Connect("https://" + serverUrl + "/sdk"); client.Login(userLogin, userPassword); ... ManagedObjectReference cloneTask_MoRef = null; //1 waiting the cloning task cloneTask_MoRef = sourceVm.cloneVM_Task(sourceVm.Parent, "cloneName", mySpec); if (cloneTask_MoRef == null) { //error }else { PropertyCollector pc = new PropertyCollector(client, cloneTask_MoRef); PropertyFilterSpec[] pfs = null; RetrieveOptions ro = new RetrieveOptions(); RetrieveResult rResult = new RetrieveResult(); //PropertySpec //pc.CreateFilter(pfs, true); //rResult = pc.RetrievePropertiesEx(pfs,ro); // //2 PowerOn the CloneVM cloneVM = this.vimClientTools.getVirtualMachines(selectedDC, cloneName)[0]; //3 waiting the powerOn Task... //What could i do to know if the task is over or in progress ? :-(

我相信这会加速你的代码