Uploaded image for project: 'Core Server'
  1. Core Server
  2. SERVER-99025

histogramCE: Estimate for inequality over an array column is inaccurate

    • Type: Icon: Bug Bug
    • Resolution: Unresolved
    • Priority: Icon: Major - P3 Major - P3
    • None
    • Affects Version/s: None
    • Component/s: None
    • None
    • Query Optimization
    • ALL
    • Hide
      db.foo.drop();
      
      let array_docs = [];
      let array = [];
      for (let i = 0; i < 50; i++) {
          array_docs.push({a: array.slice()});
          array.push(i);
      }
      
      
      db.foo.insertMany(array_docs);
      db.foo.runCommand({analyze: "foo", key: "a"});
      db.adminCommand({setParameter: 1, planRankerMode: "histogramCE"});
      db.foo.find({a: {$gt: 40}}).count();
      db.foo.find({a: {$gt: 40}}).explain().queryPlanner.winningPlan.cardinalityEstimate;
      
      Show
      db.foo.drop(); let array_docs = []; let array = []; for (let i = 0; i < 50; i++) { array_docs.push({a: array.slice()}); array.push(i); } db.foo.insertMany(array_docs); db.foo.runCommand({analyze: "foo" , key: "a" }); db.adminCommand({setParameter: 1, planRankerMode: "histogramCE" }); db.foo.find({a: {$gt: 40}}).count(); db.foo.find({a: {$gt: 40}}).explain().queryPlanner.winningPlan.cardinalityEstimate;

      The estimates for inequality predicates over array fields are inaccurate, sometimes overestimating by a factor of 10x

      Enterprise test> db.foo.find({a: {$gt: 40}}).count();
      8
      Enterprise test> db.foo.find({a: {$gt: 40}}).explain().queryPlanner.winningPlan.cardinalityEstimate;
      18.911000191707124
      

      I think the reason is that one document can contribute multiple entries into the histogram, thus inflating all estimates involving inequalities.

            Assignee:
            Unassigned Unassigned
            Reporter:
            philip.stoev@mongodb.com Philip Stoev
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: