MongoDB中 同时使用$or和sort()查询性能分析

 代码如下 复制代码

mongos> db.find({ "user" : "jhon"}).sort({"name" :
1}).limit(100).explain()
{
        "cursor" : "BtreeCursor user_1",
        "nscanned" : 10100,
        "nscannedObjects" : 10100,
        "n" : 100,
        "scanAndOrder" : true,
        "millis" : 116,
        "nYields" : 0,
        "nChunkSkips" : 0,
        "isMultiKey" : false,
        "indexOnly" : false,
        "indexBounds" : {
                "user" : [
                        [
                                "jhon",
                                "jhon"
                        ]
                ]
        }
}

Second, I do $or query with sort():
mongos> db.find({ "$or" : [ { "user" : "jhon"} , { "owner" :
"jhon"}]}).sort({"name" : 1}).limit(100).explain()
{
        "cursor" : "BtreeCursor name_1",
        "nscanned" : 1010090,
        "nscannedObjects" : 1010090,
        "n" : 100,
        "millis" : 3800,
        "nYields" : 0,
        "nChunkSkips" : 0,
        "isMultiKey" : false,
        "indexOnly" : false,
        "indexBounds" : {
                "name" : [
                        [
                                {
                                        "$minElement" : 1
                                },
                                {
                                        "$maxElement" : 1
                                }
                        ]
                ]
        }
}

Last, I do $or query without sort():
mongos> db.find({ "$or" : [ { "user" : "jhon"} , { "owner" :
"jhon"}]}).limit(100).explain()
{
        "cursor" : "BtreeCursor user_1",
        "nscanned" : 100,
        "nscannedObjects" : 100,
        "n" : 100,
        "millis" : 0,
        "nYields" : 0,
        "nChunkSkips" : 0,
        "isMultiKey" : false,
        "indexOnly" : false,
        "indexBounds" : {
                "user" : [
                        [
                                "jhon",
                                "jhon"
                        ]
                ]
        }
}

可以看出:

第一次查询中, 单独使用sort()时性能很好。

第二次查询中,联合使用了$or和sort()时,性能很差。

第三次查询中,单独使用$or,性能很好。

 

时间: 2024-09-10 22:57:45

MongoDB中 同时使用$or和sort()查询性能分析的相关文章

java springmvc-关于MongoDB中两张表的查询

问题描述 关于MongoDB中两张表的查询 我需要根据一级和二级类别的name查询应用程序表的数据.但每次查询的都有用两个while循环, DBCursor cursor1=null; DBCursor cursor=this.dao.getDBCursor(offset, pageSize, db, "thirdCategory", sort); DBObject query1 = new BasicDBObject(); while (cursor.hasNext()) { @Su

SQL查询性能分析

原文:SQL查询性能分析 原文出处:http://blog.csdn.net/dba_huangzj/article/details/7623926 SQL查询性能的好坏直接影响到整个数据库的价值,对此,必须郑重对待. SQL Server提供了多种工具,下面做一个简单的介绍:   一.SQL Profiler工具 SQL Profiler可用于: l  图形化监视SQLServer查询: l  在后台收集查询信息: l  分析性能: l  诊断像死锁这样的问题: l  调试Transact-S

一起谈.NET技术,数组排序方法的性能比较(中):Array.Sort<T> 实现分析

昨天我们比较了Array.Sort方法与LINQ排序的性能,知道了LINQ排序的性能以较大幅度落后于Array.Sort方法.而对于Array.Sort来说,性能最高的是其中使用Comparer.Default作为比较器的重载方法.在前文的末尾我们做出了推测:由于排序算法已经近乎一个标准了(快速排序),因此从算法角度来说,Array.Sort方法和LINQ排序上不应该有那么大的差距,因此造成两者性能差异的原因,应该是具体实现方式上的问题. 下载.NET框架的代码 既然是比较实现的区别,那么阅读代

艾伟_转载:数组排序方法的性能比较(中):Array.Sort<T> 实现分析

昨天我们比较了Array.Sort方法与LINQ排序的性能,知道了LINQ排序的性能以较大幅度落后于Array.Sort方法.而对于Array.Sort来说,性能最高的是其中使用Comparer.Default作为比较器的重载方法.在前文的末尾我们做出了推测:由于排序算法已经近乎一个标准了(快速排序),因此从算法角度来说,Array.Sort方法和LINQ排序上不应该有那么大的差距,因此造成两者性能差异的原因,应该是具体实现方式上的问题. 下载.NET框架的代码 既然是比较实现的区别,那么阅读代

asp.net中WCF 客户端关闭带来的性能分析

这里的WCF异步调用是指单向非可靠异步调用,也就是你不知道调用是否成功,适用于性能高于可靠性的场合. 之前发布过一篇随笔WCF异步调用实战:OneWay+Asynchronous Operation,通过WCF服务端"单向(One-way)消息交换"+WCF客户端"异步信道调用(Asynchronous Operation)"实现快速的WCF异步调用. 但是,使用了一段时间,发现还是有些慢.今天实测了一下,调用代码如下:  代码如下 复制代码 var client

Mysql中两个有用的sql性能分析语句

1> explain SQL,类似于Oracle中explain语句 例如:explain select * from nad_aditem; 2> select benchmark(count,sql);计算sql语句执行count次所花费的时间 例如: mysql> select benchmark(1000;Select * FROM AD;); +--------------+ | benchmark(1000;Select * FROM AD;) | +------------

SET STATISTICS IO和SET STATISTICS TIME 在SQL Server查询性能优化中的作用

原文:SET STATISTICS IO和SET STATISTICS TIME 在SQL Server查询性能优化中的作用 近段时间以来,一直在探究SQL Server查询性能的问题,当然也漫无目的的查找了很多资料,也从网上的大神们的文章中学到了很多,在这里,向各位大神致敬.正是受大神们无私奉献精神的影响,所以小弟也作为回报,分享一下关于SET STATISTICS IO和SET STATISTICS TIME这两条T_SQL命令,在查询优化性能中的作用.       首先我想说明一下这篇文章

PostgreSQL 百亿地理位置数据 近邻查询性能

背景 本文主要要展示的是PostgreSQL在位置信息近邻(KNN)查询方面的性能. 测试类型point,索引类型GiST. (PostGIS同样支持KNN查询,性能和本文的测试差不多)  测试数据量大于100亿. 结果 64个并发,随机选点,单次KNN查询请求的平均响应时间为0.848毫秒. 测试环境和优化请参考 http://blog.163.com/digoal@126/blog/static/16387704020160941345888/ 创建测试表 postgres=# create

MySQL性能分析系统

对于MySQL慢查询日志的分析,现已由多种工具来提供:最原始的mysqldumpslow,功能比较齐全的 mysqlsla和percona的 pt-query-digest:以上工具大大提高了DBA来分析数据库的性能效率,减少了过多的猜测过程: 如果能实现定时分析SQL并且进行可视化展示呢? 适用过Query-Digest-UI-master 这个UI插件,在配合 percona的 pt-query-digest工具,只是简单做到一个可视化的结果:如果对于多个服务器的分析,这个表现的就很吃力: