Index intersection not working / getting rejected

From: Gerold Böhler <domainloop@xxxxxxxxx>
To: mongodb-user <mongodb-user@xxxxxxxxxxxxxxxx>
Date: Wed, 11 May 2016 07:00:13 -0700 (PDT)
Why ads?
Hi all,

i am trying to get index intersection to work, but somehow it keeps getting 
rejected and i don't know why. If i query the 2 indexed fields separately, 
the index seems to be used, but when i try to query both fields at the same 
time, it doesn't use the index and the query takes very long. So here are 
the queries, the getIndexes() output is below as well. Any help is greatly 
appreciated!

Thanks,
Gerold

*First i try to query for {state: "deployed"}, which seems to use the index*
products:PRIMARY> db.products.find({state: "deployed"}).explain()
{
 "queryPlanner" : {
 "plannerVersion" : 1,
 "namespace" : "xxx_production.products",
 "indexFilterSet" : false,
 "parsedQuery" : {
 "state" : {
 "$eq" : "deployed"
 }
 },
 "winningPlan" : {
 "stage" : "FETCH",
 "inputStage" : {
 "stage" : "IXSCAN",
 "keyPattern" : {
 "state" : 1
 },
 "indexName" : "product_state_index",
 "isMultiKey" : false,
 "isUnique" : false,
 "isSparse" : false,
 "isPartial" : false,
 "indexVersion" : 1,
 "direction" : "forward",
 "indexBounds" : {
 "state" : [
 "[\"deployed\", \"deployed\"]"
 ]
 }
 }
 },
 "rejectedPlans" : [ ]
 },
 "serverInfo" : {
 "host" : "s25",
 "port" : 27006,
 "version" : "3.2.6",
 "gitVersion" : "05552b562c7a0b3143a729aaa0838e558dc49b25"
 },
 "ok" : 1
}





*Then i try to query {"filter_hash.main_category_id":2} which seems to be 
using the index as well.*
products:PRIMARY> db.products.find({"filter_hash.main_category_id":2}).
explain()
{
 "queryPlanner" : {
 "plannerVersion" : 1,
 "namespace" : "xxx_production.products",
 "indexFilterSet" : false,
 "parsedQuery" : {
 "filter_hash.main_category_id" : {
 "$eq" : 2
 }
 },
 "winningPlan" : {
 "stage" : "FETCH",
 "inputStage" : {
 "stage" : "IXSCAN",
 "keyPattern" : {
 "filter_hash.main_category_id" : 1,
 "click_count" : -1,
 "product_hash.shop_updated_at" : -1
 },
 "indexName" : "product_sort_best_and_new_products_index",
 "isMultiKey" : false,
 "isUnique" : false,
 "isSparse" : false,
 "isPartial" : false,
 "indexVersion" : 1,
 "direction" : "forward",
 "indexBounds" : {
 "filter_hash.main_category_id" : [
 "[2.0, 2.0]"
 ],
 "click_count" : [
 "[MaxKey, MinKey]"
 ],
 "product_hash.shop_updated_at" : [
 "[MaxKey, MinKey]"
 ]
 }
 }
 },
 "rejectedPlans" : [
 {
 "stage" : "FETCH",
 "inputStage" : {
 "stage" : "IXSCAN",
 "keyPattern" : {
 "filter_hash.main_category_id" : 1,
 "product_hash.price" : 1,
 "click_count" : -1,
 "product_hash.shop_updated_at" : -1
 },
 "indexName" : "product_sort_low_prices_index",
 "isMultiKey" : false,
 "isUnique" : false,
 "isSparse" : false,
 "isPartial" : false,
 "indexVersion" : 1,
 "direction" : "forward",
 "indexBounds" : {
 "filter_hash.main_category_id" : [
 "[2.0, 2.0]"
 ],
 "product_hash.price" : [
 "[MinKey, MaxKey]"
 ],
 "click_count" : [
 "[MaxKey, MinKey]"
 ],
 "product_hash.shop_updated_at" : [
 "[MaxKey, MinKey]"
 ]
 }
 }
 },
 {
 "stage" : "FETCH",
 "inputStage" : {
 "stage" : "IXSCAN",
 "keyPattern" : {
 "filter_hash.main_category_id" : 1,
 "product_hash.price" : -1,
 "click_count" : -1,
 "product_hash.shop_updated_at" : -1
 },
 "indexName" : "product_sort_high_prices_index",
 "isMultiKey" : false,
 "isUnique" : false,
 "isSparse" : false,
 "isPartial" : false,
 "indexVersion" : 1,
 "direction" : "forward",
 "indexBounds" : {
 "filter_hash.main_category_id" : [
 "[2.0, 2.0]"
 ],
 "product_hash.price" : [
 "[MaxKey, MinKey]"
 ],
 "click_count" : [
 "[MaxKey, MinKey]"
 ],
 "product_hash.shop_updated_at" : [
 "[MaxKey, MinKey]"
 ]
 }
 }
 },
 {
 "stage" : "FETCH",
 "inputStage" : {
 "stage" : "IXSCAN",
 "keyPattern" : {
 "filter_hash.main_category_id" : 1,
 "product_hash.reduction" : -1,
 "click_count" : -1,
 "product_hash.shop_updated_at" : -1
 },
 "indexName" : "product_sort_reduction_index",
 "isMultiKey" : false,
 "isUnique" : false,
 "isSparse" : false,
 "isPartial" : false,
 "indexVersion" : 1,
 "direction" : "forward",
 "indexBounds" : {
 "filter_hash.main_category_id" : [
 "[2.0, 2.0]"
 ],
 "product_hash.reduction" : [
 "[MaxKey, MinKey]"
 ],
 "click_count" : [
 "[MaxKey, MinKey]"
 ],
 "product_hash.shop_updated_at" : [
 "[MaxKey, MinKey]"
 ]
 }
 }
 },
 {
 "stage" : "FETCH",
 "inputStage" : {
 "stage" : "IXSCAN",
 "keyPattern" : {
 "filter_hash.main_category_id" : 1
 },
 "indexName" : "filter_hash.main_category_id",
 "isMultiKey" : false,
 "isUnique" : false,
 "isSparse" : false,
 "isPartial" : false,
 "indexVersion" : 1,
 "direction" : "forward",
 "indexBounds" : {
 "filter_hash.main_category_id" : [
 "[2.0, 2.0]"
 ]
 }
 }
 }
 ]
 },
 "serverInfo" : {
 "host" : "s25",
 "port" : 27006,
 "version" : "3.2.6",
 "gitVersion" : "05552b562c7a0b3143a729aaa0838e558dc49b25"
 },
 "ok" : 1
}



*And finally i try to query {state: "deployed", 
"filter_hash.main_category_id":2} and this one takes forever for some 
reason*. The documentation says that the AND_SORTED stage shows that index 
intersection is being used, but it got rejected and i don't know why.
products:PRIMARY> db.products.find({state: "deployed", 
"filter_hash.main_category_id":2}).explain()
{
 "queryPlanner" : {
 "plannerVersion" : 1,
 "namespace" : "xxx_production.products",
 "indexFilterSet" : false,
 "parsedQuery" : {
 "$and" : [
 {
 "filter_hash.main_category_id" : {
 "$eq" : 2
 }
 },
 {
 "state" : {
 "$eq" : "deployed"
 }
 }
 ]
 },
 "winningPlan" : {
 "stage" : "FETCH",
 "filter" : {
 "filter_hash.main_category_id" : {
 "$eq" : 2
 }
 },
 "inputStage" : {
 "stage" : "IXSCAN",
 "keyPattern" : {
 "state" : 1
 },
 "indexName" : "product_state_index",
 "isMultiKey" : false,
 "isUnique" : false,
 "isSparse" : false,
 "isPartial" : false,
 "indexVersion" : 1,
 "direction" : "forward",
 "indexBounds" : {
 "state" : [
 "[\"deployed\", \"deployed\"]"
 ]
 }
 }
 },
 "rejectedPlans" : [
 {
 "stage" : "FETCH",
 "filter" : {
 "state" : {
 "$eq" : "deployed"
 }
 },
 "inputStage" : {
 "stage" : "IXSCAN",
 "keyPattern" : {
 "filter_hash.main_category_id" : 1
 },
 "indexName" : "filter_hash.main_category_id",
 "isMultiKey" : false,
 "isUnique" : false,
 "isSparse" : false,
 "isPartial" : false,
 "indexVersion" : 1,
 "direction" : "forward",
 "indexBounds" : {
 "filter_hash.main_category_id" : [
 "[2.0, 2.0]"
 ]
 }
 }
 },
 {
 "stage" : "FETCH",
 "filter" : {
 "state" : {
 "$eq" : "deployed"
 }
 },
 "inputStage" : {
 "stage" : "IXSCAN",
 "keyPattern" : {
 "filter_hash.main_category_id" : 1,
 "product_hash.reduction" : -1,
 "click_count" : -1,
 "product_hash.shop_updated_at" : -1
 },
 "indexName" : "product_sort_reduction_index",
 "isMultiKey" : false,
 "isUnique" : false,
 "isSparse" : false,
 "isPartial" : false,
 "indexVersion" : 1,
 "direction" : "forward",
 "indexBounds" : {
 "filter_hash.main_category_id" : [
 "[2.0, 2.0]"
 ],
 "product_hash.reduction" : [
 "[MaxKey, MinKey]"
 ],
 "click_count" : [
 "[MaxKey, MinKey]"
 ],
 "product_hash.shop_updated_at" : [
 "[MaxKey, MinKey]"
 ]
 }
 }
 },
 {
 "stage" : "FETCH",
 "filter" : {
 "state" : {
 "$eq" : "deployed"
 }
 },
 "inputStage" : {
 "stage" : "IXSCAN",
 "keyPattern" : {
 "filter_hash.main_category_id" : 1,
 "product_hash.price" : -1,
 "click_count" : -1,
 "product_hash.shop_updated_at" : -1
 },
 "indexName" : "product_sort_high_prices_index",
 "isMultiKey" : false,
 "isUnique" : false,
 "isSparse" : false,
 "isPartial" : false,
 "indexVersion" : 1,
 "direction" : "forward",
 "indexBounds" : {
 "filter_hash.main_category_id" : [
 "[2.0, 2.0]"
 ],
 "product_hash.price" : [
 "[MaxKey, MinKey]"
 ],
 "click_count" : [
 "[MaxKey, MinKey]"
 ],
 "product_hash.shop_updated_at" : [
 "[MaxKey, MinKey]"
 ]
 }
 }
 },
 {
 "stage" : "FETCH",
 "filter" : {
 "state" : {
 "$eq" : "deployed"
 }
 },
 "inputStage" : {
 "stage" : "IXSCAN",
 "keyPattern" : {
 "filter_hash.main_category_id" : 1,
 "product_hash.price" : 1,
 "click_count" : -1,
 "product_hash.shop_updated_at" : -1
 },
 "indexName" : "product_sort_low_prices_index",
 "isMultiKey" : false,
 "isUnique" : false,
 "isSparse" : false,
 "isPartial" : false,
 "indexVersion" : 1,
 "direction" : "forward",
 "indexBounds" : {
 "filter_hash.main_category_id" : [
 "[2.0, 2.0]"
 ],
 "product_hash.price" : [
 "[MinKey, MaxKey]"
 ],
 "click_count" : [
 "[MaxKey, MinKey]"
 ],
 "product_hash.shop_updated_at" : [
 "[MaxKey, MinKey]"
 ]
 }
 }
 },
 {
 "stage" : "FETCH",
 "filter" : {
 "state" : {
 "$eq" : "deployed"
 }
 },
 "inputStage" : {
 "stage" : "IXSCAN",
 "keyPattern" : {
 "filter_hash.main_category_id" : 1,
 "click_count" : -1,
 "product_hash.shop_updated_at" : -1
 },
 "indexName" : "product_sort_best_and_new_products_index",
 "isMultiKey" : false,
 "isUnique" : false,
 "isSparse" : false,
 "isPartial" : false,
 "indexVersion" : 1,
 "direction" : "forward",
 "indexBounds" : {
 "filter_hash.main_category_id" : [
 "[2.0, 2.0]"
 ],
 "click_count" : [
 "[MaxKey, MinKey]"
 ],
 "product_hash.shop_updated_at" : [
 "[MaxKey, MinKey]"
 ]
 }
 }
 },
 {
 "stage" : "FETCH",
 "filter" : {
 "$and" : [
 {
 "state" : {
 "$eq" : "deployed"
 }
 },
 {
 "filter_hash.main_category_id" : {
 "$eq" : 2
 }
 }
 ]
 },
 "inputStage" : {
 "stage" : "AND_SORTED",
 "inputStages" : [
 {
 "stage" : "IXSCAN",
 "keyPattern" : {
 "state" : 1
 },
 "indexName" : "product_state_index",
 "isMultiKey" : false,
 "isUnique" : false,
 "isSparse" : false,
 "isPartial" : false,
 "indexVersion" : 1,
 "direction" : "forward",
 "indexBounds" : {
 "state" : [
 "[\"deployed\", \"deployed\"]"
 ]
 }
 },
 {
 "stage" : "IXSCAN",
 "keyPattern" : {
 "filter_hash.main_category_id" : 1
 },
 "indexName" : "filter_hash.main_category_id",
 "isMultiKey" : false,
 "isUnique" : false,
 "isSparse" : false,
 "isPartial" : false,
 "indexVersion" : 1,
 "direction" : "forward",
 "indexBounds" : {
 "filter_hash.main_category_id" : [
 "[2.0, 2.0]"
 ]
 }
 }
 ]
 }
 }
 ]
 },
 "serverInfo" : {
 "host" : "s25",
 "port" : 27006,
 "version" : "3.2.6",
 "gitVersion" : "05552b562c7a0b3143a729aaa0838e558dc49b25"
 },
 "ok" : 1
}




*Here's the list of the indexes*
products:PRIMARY> db.products.getIndexes()
[
 {
 "v" : 1,
 "key" : {
 "_id" : 1
 },
 "name" : "_id_",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash" : 1
 },
 "name" : "product_filter_hash_index",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "feed_id" : 1
 },
 "name" : "product_feed_index",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "state" : 1
 },
 "name" : "product_state_index",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "landingpages_created" : 1
 },
 "name" : "product_landingpages_created",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "generic_sku" : 1
 },
 "name" : "product_generic_sku_index",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "sku" : 1
 },
 "name" : "product_sku_index",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "sha" : 1
 },
 "name" : "product_sha_index",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "feed_id" : 1,
 "generic_sku" : 1,
 "sku" : 1
 },
 "name" : "product_feed_generic_sku_index",
 "ns" : "xxx_production.products",
 "sparse" : true
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.main_category_id" : 1,
 "click_count" : -1,
 "product_hash.shop_updated_at" : -1
 },
 "name" : "product_sort_best_and_new_products_index",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.main_category_id" : 1,
 "product_hash.price" : 1,
 "click_count" : -1,
 "product_hash.shop_updated_at" : -1
 },
 "name" : "product_sort_low_prices_index",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.main_category_id" : 1,
 "product_hash.price" : -1,
 "click_count" : -1,
 "product_hash.shop_updated_at" : -1
 },
 "name" : "product_sort_high_prices_index",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.main_category_id" : 1,
 "product_hash.reduction" : -1,
 "click_count" : -1,
 "product_hash.shop_updated_at" : -1
 },
 "name" : "product_sort_reduction_index",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.main_category_id" : 1
 },
 "name" : "filter_hash.main_category_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.merchandise_id" : 1
 },
 "name" : "filter_hash.merchandise_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.brand_0_id" : 1
 },
 "name" : "filter_hash.brand_0_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.brand_1_id" : 1
 },
 "name" : "filter_hash.brand_1_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.gender_id" : 1
 },
 "name" : "filter_hash.gender_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.category_0_id" : 1
 },
 "name" : "filter_hash.category_0_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.category_1_id" : 1
 },
 "name" : "filter_hash.category_1_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.category_2_id" : 1
 },
 "name" : "filter_hash.category_2_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.category_3_id" : 1
 },
 "name" : "filter_hash.category_3_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.category_4_id" : 1
 },
 "name" : "filter_hash.category_4_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.category_5_id" : 1
 },
 "name" : "filter_hash.category_5_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.package_id" : 1
 },
 "name" : "filter_hash.package_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.reduced_id" : 1
 },
 "name" : "filter_hash.reduced_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.color_0_id" : 1
 },
 "name" : "filter_hash.color_0_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.color_1_id" : 1
 },
 "name" : "filter_hash.color_1_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.material_id" : 1
 },
 "name" : "filter_hash.material_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.pattern_id" : 1
 },
 "name" : "filter_hash.pattern_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.size_id" : 1
 },
 "name" : "filter_hash.size_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.bio_id" : 1
 },
 "name" : "filter_hash.bio_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.shop_id" : 1
 },
 "name" : "filter_hash.shop_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.invoice_id" : 1
 },
 "name" : "filter_hash.invoice_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.free_shipping_id" : 1
 },
 "name" : "filter_hash.free_shipping_id",
 "ns" : "xxx_production.products"
 },
 {
 "v" : 1,
 "key" : {
 "filter_hash.coupon_id" : 1
 },
 "name" : "filter_hash.coupon_id",
 "ns" : "xxx_production.products"
 }
]




-- 
You received this message because you are subscribed to the Google Groups "mongodb-user"
group.

For other MongoDB technical support options, see: https://docs.mongodb.org/manual/support/
--- 
You received this message because you are subscribed to the Google Groups "mongodb-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mongodb-user+unsubscribe@xxxxxxxxxxxxxxxx.
To post to this group, send email to mongodb-user@xxxxxxxxxxxxxxxx.
Visit this group at https://groups.google.com/group/mongodb-user.
To view this discussion on the web visit https://groups.google.com/d/msgid/mongodb-user/a6e1de1d-37de-43c0-9755-2d743e74a600%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Why ads?