MongoDB的索引与索引字段的顺序

想提高数据库的查询效率需要建立索引,用索引查询。使用索引查询和不使用索引查询提升的效率和数据库表的记录条数和调用此时有关系。若记录足够大,用索引查询和不用索引查询相差一千倍以上很正常。

MongoDB默认为主键字段_id创建唯一索引,这个索引可以确保每个文档在集合中的唯一性。在MongoDB中,_id字段是自动生成的,除非在插入文档时显式指定一个值。这个_id索引是升序索引,用于快速查找和检索文档。

索引是多个字段的,查询时要注意索引的字段顺序。调用时的字段相同更能利用索引。虽然在原则上索引的顺序对查询效率影响不大。但是在循环查询,多线程操作数据库时还是有可能影响效率的。

我们见到一个循环查询超过了571毫秒,后来经过分析代码:

复制代码
for (let x of list) {
        let score = await AModel.findOne({
            type: 'total',
            area_id: x.id
        }, '-_id').lean().exec();
        x.score = score && score.score || 0;
    }

数据库索引:

复制代码
AValueSchema.index({area_id: 1, type: 1});

通过修改查询的字段顺序,能减少这种因为并发操作影响数据库的查询效率。当然若你在一张表上创建过多的索引,同样影响数据库的操作效率。解决这种循环查询数据库和并发操作数据引起超过1秒的处理的解决方式是尽量不用循环查询数据库,把这种非及时更新的大批量查询结果放在redis里,每天在凌晨时去让定时任务去更新。

相关推荐
Devin_chen几秒前
发布订阅模式渐进式学习指南
javascript
2401_865439635 分钟前
C#怎么将控制台输出保存到TXT_C#如何重定向输出流【源码】
jvm·数据库·python
2301_8152795219 分钟前
Golang和Node.js哪个适合后端_Golang Node对比教程【实战】
jvm·数据库·python
m0_7488394922 分钟前
CSS如何制作圆形头像盒子_设置border-radius-50%
jvm·数据库·python
菠萝地亚狂想曲27 分钟前
Zephyr_01, environment
android·java·javascript
Wyz2012102428 分钟前
如何进行SQL字符串大小写转换_运用UPPER与LOWER函数
jvm·数据库·python
weixin_7042660528 分钟前
MySQL 调优实践
数据库·mysql
qq_1898070332 分钟前
SQL报表临时表过大问题_临时表生成机制优化
jvm·数据库·python
蜡台38 分钟前
vue params传参刷新网页数据丢失解决方法
前端·javascript·vue.js
csdn2015_1 小时前
postgresql string_to_array 方法
数据库·postgresql