Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Product Index Optimizations #6701

Open
wants to merge 3 commits into
base: trunk
Choose a base branch
from
Open

Conversation

dcrdev
Copy link
Contributor

@dcrdev dcrdev commented Dec 9, 2022

Resolves N/a
Impact: minor
Type: performance

Issue

When dealing with a large number of products you may or may not observe a slowdown when querying via the products query. Digging a little deeper into this one the leading causes of this is that more often than not this query results in one or more sequential scans of the products collection.

This occurs because of a default filter being applied on Products.ancestors which is used to determine whether a product is top level or not. This default is causing the generated query plan to miss all available indexes in certain situations.

Solution

In switching to an array size approach for determining whether a product has no ancestors, we are at least forcing a hit on the default index:

[{ updatedAt: 1, _id: 1 }]

However this in and of itself does not guarantee that the correct index will be used without explicitly specifying ancestors as part of a compound index or providing the engine with an index hint; whether or not we get a partial index scan without doing so against the desired index very much depends on the sort criteria being specified.

@changeset-bot
Copy link

changeset-bot bot commented Dec 9, 2022

⚠️ No Changeset found

Latest commit: a4f9b08

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants