How can I load data faster in Laravel when filtering large integer ID lists?
When working with large datasets in Laravel, query performance directly impacts application speed and scalability. One commonly overlooked optimization involves filtering records by integer IDs.
Many applications rely on whereIn() for this task, but when the ID list grows large, this approach introduces unnecessary overhead. Laravel provides a more efficient alternative specifically designed for integer columns, and in this guide, we’ll show what the problem is, how to fix it, and how much performance you gain.
Problem: Slow ID Filtering
Most developers naturally use whereIn() when filtering records by IDs:
| 1 | Product::whereIn('id', range(1, 5000))->get(); |
While this works correctly, it introduces performance overhead because Laravel:
- Binds each value as a query parameter
- Performs type checking on every element
- Adds parsing overhead for large arrays
When filtering thousands of integer IDs, this overhead becomes noticeable and slows down query execution—especially in reports, exports, cron jobs, or large-scale data processing.
Solution: Faster Integer Queries
Laravel provides a faster alternative specifically optimized for integer columns: whereIntegerInRaw() (Laravel 9+).
| 1 | Product::whereIntegerInRaw('id', range(1, 5000))->get(); |
Why is this faster
- Injects raw integers directly into the SQL query
- Skips parameter binding
- Optimized for INT columns
- Reduces SQL parsing and execution time
Measuring the Performance Gain
Measuring whereIn() Execution Time
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | $start = microtime(true); Product::whereIn('id', range(1, 5000))->get(); $time = microtime(true) - $start; logger('whereIn time: ' . $time); |
Measuring whereIntegerInRaw() Execution Time
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | $start = microtime(true); Product::whereIntegerInRaw('id', range(1, 5000))->get(); $time = microtime(true) - $start; logger('whereIntegerInRaw time: ' . $time); |
Performance Comparison (Real-World Example)
| Method | Records | Avg Execution Time |
| whereIn() | 5,000 IDs | ~45–60 ms |
| whereIntegerInRaw() | 5,000 IDs | ~25–35 ms |
➡ 30–40% faster execution
➡ Performance gains increase with larger ID lists
(Exact results depend on database engine, hardware, and indexing)
SQL Difference (Behind the Scenes)
whereIn():
| 1 | WHERE id IN (?, ?, ?, ?, ...) |
whereIntegerInRaw():
| 1 | WHERE id IN (1, 2, 3, 4, ...) |
By eliminating parameter binding, Laravel reduces query processing overhead—this is where the speed boost comes from.
Is whereIntegerInRaw() Safe?
Safe when:
- Values are guaranteed integers
- Data comes from trusted/internal logic
Avoid when:
- Input comes directly from users
- Values include strings or mixed data types
Always validate and sanitize input before using raw query methods.
When Should You Use It?
Use whereIntegerInRaw() when:
- Filtering primary or foreign keys
- Running reports, exports, or background jobs
- Working with large numeric ranges
Stick with whereIn() when:
- Filtering string values
- Handling user-provided input
- Security is more important than micro-optimizations
Conclusion
Laravel includes performance-focused helpers—you just need to know when to use them.
Quick rule of thumb:
If the column is an integer and the values are trusted →
Use whereIntegerInRaw() for faster queries.
Need Help Optimizing Laravel Performance?
Our team helps businesses optimize Laravel applications for speed, scalability, and reliability—from query tuning to large-scale architecture improvements.
Recent help desk articles
Greetings! I'm Aneesh Sreedharan, CEO of 2Hats Logic Solutions. At 2Hats Logic Solutions, we are dedicated to providing technical expertise and resolving your concerns in the world of technology. Our blog page serves as a resource where we share insights and experiences, offering valuable perspectives on your queries.

