我在localhost上有mongodb,在数据库中我有9千万条记录。当我通过db.emails.find({"name":"example"})
搜索任何记录时,获得结果需要很长时间。有什么方法可以提高mongodb的速度吗?
答案 0 :(得分:3)
为name
字段
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 ? :-(
我相信这会加速你的代码