0
0
mirror of https://github.com/mongodb/mongo.git synced 2024-11-25 00:58:53 +01:00
mongodb/jstests/noPassthroughWithMongod/query/large_in_with_indexes.js
Nick Zolnierz 668a6f4e9e SERVER-94971 Add query ownership for files under jstests/libs (#27763)
GitOrigin-RevId: 1cd8a1cdb3d45876003ad3ccddd4d466cd9fb66c
2024-10-03 16:08:45 +00:00

35 lines
1.1 KiB
JavaScript

// Tests that a query with $in filter over a large array chooses the optimal index. We ban SBE
// multi planner to run as it chooses a plan with a suboptimal index.
import {getPlanStage} from "jstests/libs/query/analyze_plan.js";
// The SBE multi planner chooses the wrong index.
const coll = db.large_in_with_indexes;
coll.drop();
Random.setRandomSeed(1);
const docs = [];
const numDocs = 100000;
for (let i = 0; i < numDocs; i++) {
docs.push({_id: i, rd: Random.randInt(numDocs), ard: Random.randInt(numDocs)});
}
assert.commandWorked(coll.createIndex({rd: 1}));
assert.commandWorked(coll.createIndex({ard: 1}));
assert.commandWorked(coll.createIndex({rd: 1, ard: 1}));
assert.commandWorked(coll.createIndex({_id: 1, rd: 1, ard: 1}));
assert.commandWorked(coll.insertMany(docs));
const inArray = [];
for (let i = 0; i < 300; i++) {
inArray.push(Random.randInt(numDocs));
}
const explain =
coll.find({rd: {$gte: 7}, _id: {$in: inArray}}).sort({ard: 1}).explain("executionStats");
const ixscanStage = getPlanStage(explain, "IXSCAN");
assert.eq(ixscanStage.indexName, "_id_1_rd_1_ard_1", ixscanStage);