如何为 mongo 复杂查询建立索引

问题描述 投票:0回答:1

我真的不明白如何使用索引提高查询的性能。

db.Vendite.aggregate([{$group: { 
_id: {
anno: "$anno", mese: "$mese", cod_age: "$cod_age", cod_int: "$cod_int",  cod_cli: "$cod_cli", cod_linea_comm: "$cod_linea_comm", cod_sett_comm: "$cod_sett_comm", _art: "$cod_art"}, 
vendite_quantita: {
   $sum: { 
      $add: [ {
         $subtract: ["$ven_quantita", "$res_quantita"]}, "$oma_quantita"]}}, 
            vendite_quantita_pz: {
                $sum: {
                   $add: [{
                      $subtract: ["$ven_quantita_pz", "$res_quantita_pz"]}, 
                        "$oma_quantita_pz"]}}, 
vendite_netto: {
   $sum: {
      $subtract: [{
         $subtract: ["$ven_lordo", {
            $add: ["$ven_incondizionato", "$ven_finanziari", "$ven_canvass", "$ven_offerta"]}]},
               {$subtract: ["$res_lordo", {$add: ["$res_incondizionato", "$res_finanziari", "$res_offerta", "$res_offerta"]}]}]} }}}, 
{ $sort: { "anno": 1, "mese": 1, "cod_age": 1, "cod_int": 1, "cod_cli": 1, "cod_linea_comm": 1, "cod_sett_comm": 1, "cod_art": 1 }}]).explain("executionStats")

这是我的查询,观看mongoDB大学教程,我知道最好使用匹配>排序>范围的索引。就我而言,我尝试过以下索引:

anno_1_mese_1_cod_age_1_cod_int_1_cod_cli_1_cod_linea_comm_1_cod_sett_comm_1_cod_art_1

这是我的排序顺序。

查询时间没有任何改善。我的第一个想法是查询太详细了……我的意思是该集合有 270 万条记录并返回 210 万条结果,因此索引可以提供帮助,但作用不大。这是正确的还是我做错了什么?

在索引过程中我也应该照顾我的求和字段吗?

只是说,当我使用查询而不通过“提示”强制任何索引时,mongo 会在没有任何索引的情况下执行它。

mongodb mongodb-query mongosh
1个回答
0
投票

在索引中包含 sum 字段可能不会显着提高性能,除非您经常根据这些字段进行查询。但是,如果这些字段在您的查询中经常使用,则值得尝试对这些字段建立索引。

以下是创建覆盖聚合查询中使用的字段的索引的方法:

db.Vendite.createIndex({ “年”:1, “梅塞”:1, “鳕鱼年龄”:1, “cod_int”:1, “cod_cli”:1, “cod_linea_comm”:1, “cod_sett_comm”:1, “鳕鱼艺术”:1 });

© www.soinside.com 2019 - 2024. All rights reserved.