CBR calulates too high cost for sort order on IXScans

XMLWordPrintableJSON

    • Type: Bug
    • Resolution: Works as Designed
    • Priority: Major - P3
    • None
    • Affects Version/s: 8.3.3
    • Component/s: None
    • None
    • Query Optimization
    • ALL
    • Hide
      db = db.getSiblingDB("db1");
      
      db.col1.drop();
      
      const docs = [];
      for (let i = 0; i < 66600; i++) {
        docs.push({
          SessionId: `OTHER_${String(i).padStart(8, "0")}`,
          Expiration: new Date(Date.now() - i * 60000),
          SubjectId: `user_${i % 1000}`
        });
      }
      
      db.col1.insertMany(docs);
      
      db.col1.createIndex({ Expiration: 1, SessionId: 1 });
      db.col1.createIndex({ Expiration: -1, SubjectId: 1 });
      
      db.col1.find( { SessionId: "NON_EXISTING_SESSION" }, { Expiration: 1, SubjectId: 1, _id: 0 } ).sort({ Expiration: -1 }).limit(1).explain("allPlansExecution");
      
      Show
      db = db.getSiblingDB( "db1" ); db.col1.drop(); const docs = []; for (let i = 0; i < 66600; i++) { docs.push({ SessionId: `OTHER_${ String (i).padStart(8, "0" )}`, Expiration: new Date(Date.now() - i * 60000), SubjectId: `user_${i % 1000}` }); } db.col1.insertMany(docs); db.col1.createIndex({ Expiration: 1, SessionId: 1 }); db.col1.createIndex({ Expiration: -1, SubjectId: 1 }); db.col1.find( { SessionId: "NON_EXISTING_SESSION" }, { Expiration: 1, SubjectId: 1, _id: 0 } ).sort({ Expiration: -1 }).limit(1).explain( "allPlansExecution" );
    • None
    • None
    • None
    • None
    • None
    • None
    • None

      CBR chooses wrong plan if there are two competing indexes with a different sort.

            Assignee:
            Timour Katchaounov
            Reporter:
            Peter Volk
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

              Created:
              Updated:
              Resolved: