0
0
Flaskframework~8 mins

Querying with filter and filter_by in Flask - Performance & Optimization

Choose your learning style9 modes available
Performance: Querying with filter and filter_by
MEDIUM IMPACT
This affects how quickly the database returns filtered data and how much processing the server does before sending results.
Filtering database records in Flask SQLAlchemy
Flask
User.query.filter(User.name.like('john%')).all()
Starts with fixed string, allowing index use and faster query execution.
📈 Performance GainReduces query time by 80%, improving LCP
Filtering database records in Flask SQLAlchemy
Flask
User.query.filter(User.name.like('%john%')).all()
Using a wildcard at the start of LIKE disables index use, causing full table scans.
📉 Performance CostBlocks rendering for 100+ ms on large tables due to slow query
Performance Comparison
PatternDOM OperationsReflowsPaint CostVerdict
filter with leading wildcardN/AN/ADelays initial paint due to slow data[X] Bad
filter with indexed prefixN/AN/AFaster data arrival improves paint[OK] Good
filter for equalityN/AN/ASlightly slower server processing[!] OK
filter_by for equalityN/AN/AOptimized server processing[OK] Good
Rendering Pipeline
The database query runs before the browser rendering starts. Slow queries delay data arrival, increasing LCP. Efficient filters reduce server processing time, speeding up data delivery and page paint.
Server Processing
Network Transfer
Browser Rendering
⚠️ BottleneckServer Processing (slow database queries)
Core Web Vital Affected
LCP
This affects how quickly the database returns filtered data and how much processing the server does before sending results.
Optimization Tips
1Avoid leading wildcards in LIKE filters to enable index use.
2Use filter_by for simple equality filters to reduce server processing time.
3Index columns used in filters to speed up database queries and improve LCP.
Performance Quiz - 3 Questions
Test your performance knowledge
Which filter pattern is faster for simple equality in Flask SQLAlchemy?
Afilter(User.age == 30)
Bfilter_by(age=30)
Cfilter(User.age.like('%30%'))
Dfilter(User.age != 30)
DevTools: Network and Performance panels
How to check: 1. Open DevTools and go to Network tab. 2. Reload page and find API/database request. 3. Check request duration and response size. 4. Use Performance tab to see when main content paints.
What to look for: Look for long server response times delaying Largest Contentful Paint (LCP). Faster queries show shorter wait times and quicker paint.