MongoDB的统计查询和条件统计查询问题请教

我的毕设是做一个电商系统,主要是拿MongoDB来生成报表,也就是说MongoDB对这个系统的功能主要是用来查询
测试环境:
操作系统:CentOS release 6.3 (Final)
CPU:Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz
内存:1G
RAM:95G
MySQL版本:mysql-5.6.12-linux-glibc2.5-x86_64.tar
MongoDB版本:mongodb-linux-x86_64-2.4.12
上面这个是我的测试环境
我在数据量分别为100W、200W、300W、400W和500W的时候对MongoDB和MySQL做查询测试,查的表叫user的用户表
MongoDB的统计查询语句是db.user.find().count();
MySQL的统计查询语句是select count(*) from user;
当仅仅是做无条件统计查询,
100万 200万 300万 400万 500万
MySQL 1.12 2.13 3.34 4.59 5.82
MongoDB 0.0042 0.0064 0.0112 0.0154 0.0194
MongoDB的查询时间快的惊人,MySQL的查询时间是MongoDB的两个数量级
可是当我加上条件的时候,比方根据一段时间来查询,查的还是用户表user,reg_time是里面的一个叫注册时间的字段,查询从03年到06年总共注册了多少用户
MongoDB条件查询语句db.user.find({"reg_time":{"$gte":"2003-1-1","$lte":"2006-12-30"}})
MySQL条件查询语句select count(*) from user where reg_time between '2003-1-1' and '2006-12-30';
100万 200万 300万 400万 500万
MySQL 2.33 3.23 4.13 5.35 5.82
MongoDB 1.7146 2.1256 2.6646 3.2614 6.46
结果MongoDB的时间明显没有统计查询的那么好,想请问下是什么原因,另外两个数据库的表都没有做索引
最新回答
只为伊人飘香》

2024-04-27 01:30:38

db.user.find().count(); ==> 这个快是因为 _id作为主键是一个相对小的索引


而对应的mysql里是走的全表扫描


如果你设计的表结构很满足范式,那么其实并不是MongoDB所擅长的场景,你不会觉得mongodb有多快

dbdao.com it在线教育