If your Notion database becomes sluggish or unresponsive when you apply a filter, you are likely hitting a performance limit in how Notion indexes and queries large datasets. The root cause is that each filter triggers a real-time scan across all rows in the database, and when the database contains thousands of entries or complex rollup properties, this scan overwhelms the browser or desktop app. This article explains why filters cause lag and provides a practical index workaround to restore speed without removing your data.
Key Takeaways: Speed Up a Lagging Filtered Database
- Add a select property to use as an index: Creating a dedicated Select property and populating it for each row lets Notion pre-sort data and avoid scanning every row on every filter change.
- Apply the index filter first: Set the index property as the primary filter to reduce the dataset before adding secondary filters, which dramatically cuts query time.
- Archive or remove unused rows: Trimming the database to only active entries reduces the total scan size and is the fastest way to eliminate lag entirely.
Why a Notion Database Filter Causes Lag
Notion stores database content as blocks in a graph structure rather than in a traditional relational database. When you apply a filter, Notion must traverse every block in the current view to evaluate the filter condition. For a database with 5,000 rows, each with 10 properties, that is 50,000 block evaluations per filter change. Rollup properties and formula properties compound this because they require Notion to compute values on the fly before the filter can run. The lag becomes noticeable when the total number of block evaluations exceeds what the browser’s main thread can process in under 100 milliseconds.
The problem is not a bug but a design limitation. Notion does not maintain traditional database indexes. Every filter is a full table scan. This design works well for small databases but breaks down once the database passes roughly 2,000 rows or includes heavy linked properties. The workaround is to simulate an index by using a Select property that you manually or automatically populate with a sorting key, then filter on that property first.
How the Index Workaround Mimics a Real Database Index
In a proper database engine, an index stores a sorted copy of a column so the engine can jump directly to matching rows. Notion does not have this feature, but you can achieve the same effect by adding a Select property whose values correspond to a logical grouping of your data. For example, if you filter by status, task type, or month, you create a Select property with those exact options. When you filter by that property, Notion still scans all rows, but the Select property’s internal block structure is simpler than a rollup or formula, so the scan completes faster. The real speed gain comes from applying this filter as the first filter, which reduces the row count before any complex property is evaluated.
Steps to Implement the Index Workaround
Follow these steps to add an index property and configure your filters for maximum speed.
- Create the index property
Open your database. Click the + icon in the last column header. Select Select from the property type list. Name the property something like “SortKey” or “Index.” Do not use a rollup or formula for this property. - Populate the index values
For each row, click the new Select property cell and type a value that groups similar rows. Use values like “Active,” “Archived,” “Priority A,” “Priority B,” or a date range like “2025 Q1.” You can use Notion’s bulk edit feature to apply the same value to multiple rows at once. - Apply the index filter as the primary filter
Click the filter icon in the top-right of the database view. Add a filter for your new Select property. Choose the value that corresponds to the subset you want to see. For example, filter “SortKey is Active.” This reduces the visible row count immediately. - Add secondary filters after the index filter
With the index filter active, add additional filters for status, assignee, or date. Because the database now shows only a fraction of the total rows, these secondary filters run much faster. - Create saved views for common index values
Click the view name at the top of the database. Select Duplicate view. Rename it to match the index value, such as “Active Tasks.” Set the filter to your index value. Repeat for each index value you use regularly. Switching between these views is faster than changing a filter each time.
If Notion Still Has Issues After the Index Workaround
Even with an index property, some databases remain slow due to the total number of rows or the complexity of linked properties. Try these additional techniques.
Database Exceeds 10,000 Rows and Filters Are Unusable
At this size, no workaround will fully eliminate lag. The only reliable fix is to archive or delete rows you no longer need. Use a filter to isolate rows older than a certain date, select them all, and choose Archive from the row menu. Archiving removes them from the active database view and reduces the scan size.
Rollup and Formula Properties Still Cause Lag After Indexing
Rollups and formulas are evaluated every time the database renders, even with an index filter. Convert rollups to static text properties if you do not need real-time updates. To do this, create a new Text property, use the Formula property to copy the rollup value into it, then delete the rollup. This replaces a live calculation with a static value that does not require recomputation.
Linked Database Views Are Slower Than Inline Databases
A linked database view pulls data from a source database and applies its own filter. This double-filtering multiplies the scan time. Replace linked views with inline databases wherever possible. If you must use a linked view, apply the index filter both in the source database and in the linked view to minimize the dataset at each level.
Notion Index Workaround vs Native Database Performance Features
| Item | Index Workaround | Native Features |
|---|---|---|
| Setup effort | Requires manual property creation and data entry | No setup needed for small databases |
| Speed gain | Reduces filter time by 50–80% on databases with 2,000–10,000 rows | No speed improvement for large databases |
| Maintenance | Must update index values when rows change category | Zero maintenance |
| Compatibility | Works with all property types after the index filter | Works out of the box for databases under 2,000 rows |
| Impact on rollups | Does not reduce rollup evaluation cost | No impact |
The index workaround is a manual process that trades setup time for speed. Native performance features require no effort but fail once your database grows past a few thousand rows. For most business users managing project trackers, CRM databases, or content calendars, the index workaround provides the best balance of speed and control.
Conclusion
You can now reduce lag in a filtered Notion database by adding a Select property as an index and applying it as the primary filter. This workaround forces Notion to scan a smaller subset of rows before evaluating complex properties, cutting filter response time significantly. Next, create saved views for each index value so you can switch contexts instantly without reconfiguring filters. For maximum performance on databases over 10,000 rows, use the Archive feature to remove inactive rows and convert rollups to static text properties.