gpt4 book ai didi

performance - 如何解决和改进这个运行缓慢的查询?

转载 作者:可可西里 更新时间:2023-11-01 09:55:49 24 4
gpt4 key购买 nike

我希望微调我在 Mongo 上使用的字符串搜索查询。在 SQL Server 世界中,我想相信我对索引的工作原理以及如何构建正确的索引有一定的了解。我试着用 Mongo 试一试,但我不认为我的方法不对。

我的收藏大约有 430 万份文件。文档结构如下所示:

{
"_id":{
"$oid":"527027456239d1212c07a621"
},
"ReleaseId":2451,
"Status":"Accepted",
"Title":"Hard Rhythmic Motions",
"Country":"US",
"MasterId":"35976",
"Images":[
{
"Type":"primary",
"URI":"http://api.discogs.com/image/R-2451-1117047026.jpg",
"URI150":"http://api.discogs.com/image/R-150-2451-1117047026.jpg",
"Height":307,
"Width":307
},
{
"Type":"secondary",
"URI":"http://api.discogs.com/image/R-2451-1117047033.jpg",
"URI150":"http://api.discogs.com/image/R-150-2451-1117047033.jpg",
"Height":307,
"Width":307
}
],
"Artists":[
{
"_id":2894,
"Name":"DJ Hyperactive"
}
],
"Formats":[
{
"Name":null,
"Quantity":1
}
],
"Genres":[
"Electronic"
],
"Styles":[
"Hardcore",
"Acid"
]
}

我正在对顶级文档属性之一和嵌套文档属性之一执行不区分大小写的搜索:

db.releases.find({$or: [{Title: new RegExp('.*mozart.*',"i")},{'Artists.Name': new RegExp('.*mozart.*',"i")}]})

我尝试创建一个索引;当我执行 .getIndexes() 时,我可以看到我创建的索引:

{
"v" : 1,
"key" : {
"Title" : 1,
"Artists.Name" : 1
},
"ns" : "discogs.releases",
"name" : "Title_1_Artists.Name_1"
}

此时我以为我已经准备好了。但是,查询最终需要 28 到 32 秒才能执行。我尝试调用 .explain() 以获得更多信息:

{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 4098,
"nscannedObjects" : 4292400,
"nscanned" : 4292400,
"nscannedObjectsAllPlans" : 4292400,
"nscannedAllPlans" : 4292400,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 29,
"nChunkSkips" : 0,
"millis" : 29958,
"indexBounds" : {

},
"server" : "lambic:27017"
}

根据我对 Mongo 的有限了解,这看起来像是表扫描,这就是查询执行不佳的原因。但是,我不知道如何使这个查询更好!我希望我创建的索引能够涵盖此查询,但事实并非如此。

现在,我想指出的最后一件事是,这肯定不是在最强大的服务器上。硬件规范(包括 CPU 和 RAM)非常有限。但是,如果我的分析是正确的并且我正在执行表扫描,那么我一定可以在 Mongo 端进行一些性能改进。

最佳答案

全文索引可能就是您所需要的。您还可以在插入文档之前对其进行解析,并将关键字放入文档中的数组中并索引该数组。

关于performance - 如何解决和改进这个运行缓慢的查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19686766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com