mongodb - 在 MongoDB 中将排序顺序从升序更改为降序时查询性能下降
问题描述
我有一个Test
包含近 100 万条数据的样本集合,其中的样本如下:
{
data:[
{
property: 'firstName',
value: 'Robins'
},
{
property: 'position',
value: 6000
}
],
dataObj:{
firstName: 'Robins',
position: 6000
}
}
//indexes
1. db.Test.createIndex({ "data.property": 1, "data.value":1 })
2. db.Test.createIndex({ "dataObj.position": 1 })
我在这里的两个不同查询中获得了不同的性能:
查询 1
查询位置 <= 6000 并按ascending
位置顺序排序
db.Test.find({
'data': {
$elemMatch: { property: 'position', value: { $lte: 60000 } }
}
}).limit(10).sort({ 'dataObj.position': 1 }).explain("executionStats");
查询 2
查询位置 <= 6000 并按descending
位置顺序排序
db.Test.find({
'data': {
$elemMatch: { property: 'position', value: { $lte: 60000 } }
}
}).limit(10).sort({ 'dataObj.position': -1 }).explain("executionStats");
查询 1 执行统计
{
...
"executionStats" : {
"executionSuccess" : true,
"nReturned" : 10,
"executionTimeMillis" : 2,
"totalKeysExamined" : 30,
"totalDocsExamined" : 30,
}
...
}
查询 2 执行统计
{
...
"executionStats" : {
"executionSuccess" : true,
"nReturned" : 10,
"executionTimeMillis" : 4323,
"totalKeysExamined" : 167327,
"totalDocsExamined" : 167327,
}
...
}
我无法弄清楚为什么只有查询中的微小变化而在性能上有如此大的差异?
解决方案
推荐阅读
- python - 如何以安全的方式退出 Python Azure Function?
- azure - Azure 应用服务计划 - 定价模型问题
- excel - 如何更改我的 VBA 代码以不使用选择?
- swift - 集合视图中的图像视图必须居中并快速适应
- python - 在 Python 中将全格式日期转换为年月格式
- sql - 尝试对 ERD 进行正向工程时出现错误 1064
- angular - 在范围外使用 ng-template
- azure - S3 和 Blob 存储之间的数据传输
- ffmpeg - 使用 ffmpeg 从图像序列制作视频时覆盖完整视频长度
- high-availability - HA集群ActiveMQ Artemis的正确配置