欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

查询高级分析——MongoDB

程序员文章站 2022-05-08 16:50:43
...

当集合文档记录建立索引后,MongoDB 查询分析可以确保我们所建立的索引是否有效,是查询语句性能分析的重要工具。
find()提供了Explain()、Hint()等方法来进行检查和测试。

Explain()分析

explain()通过对find()、aggregate()、count()、distinct()、group()、remove()、update()命令执行结果的分析,提供了索引是否可靠等性能的判断依据。

Explain()命令格式
db. Collection.Command().explain(modes).explain
mode参数为 “queryPlanner”,“executionStats”,“allPlansExecution”

  • queryPlanner:默认的运行模式,通过运行查询优化器对当前查询进行评估,并选择一个最佳的查询计划,返回查询评估相关信息。
  • executionStats:运行查询优化器对当前查询进行评估并选择一个最佳的查询计划执行,在执行完毕后返回相关统计信息。
  • allPlansExecution:该模式结合了前两种模式的特点,返回统计数据,描述获胜计划的执行情况以及在计划选择期间捕获的其他候选计划的统计数据。

db.books.find().explain(“executionStats”)
查询高级分析——MongoDB

Hint( )分析

Hint()可以为查询临时指定需要索引的字段,其主要用法有两种:
方法一,强制指定一个索引Key,如db.collection.find().hint( “age_1” );
方法二,强制对集合做正向扫描或反向扫描,如:
db.users.find().hint( { $natural : 1 } )//强制执行正向扫描;
db.users.find().hint( { $natural : -1 } ) //强制执行反向扫描;

>db.books.find({"summary.kind": "少儿"}).hint({_id:1}).explain("executionStats")
>db.books.find({"summary.kind": "少儿"}).explain("executionStats")

通过利用hint()临时指定索引对象,进行explain分析;
然后,再通过不指定临时索引对象,进行explain分析
最后把两种分析结果进行对比,就可以知道采用哪种方法,可以获得更佳的查询性能。