# MySQL under a Laravel app

> Articles on MySQL behind a Laravel app: Eloquent queries that skip an index, reading EXPLAIN, and what performance_schema records about your tables.

Source: https://boring-observability.dev/blog/topic/mysql
Section: MySQL — the Skyline blog
Updated: 2026-11-09

---

Eloquent writes the SQL, and most days that is a good trade. These posts cover the places where the query it sends and the query you meant differ in a way MySQL cares about, such as a `whereDate()` that makes it read every row in the table, and what MySQL itself records about each table and index while the app runs.

To see which of those records your server keeps, the [performance_schema checker](https://boring-observability.dev/mysql/performance-schema-checker) takes the output of one read-only query and lists the consumers and instruments that are off.


## Posts

### [whereDate() and Other Eloquent Calls That Quietly Skip Your MySQL Index](https://boring-observability.dev/blog/laravel-wheredate-mysql-index.md)

Published 2026-11-09. whereDate('created_at', $day) sends date(created_at) = ?, and MySQL reads every row to answer it. EXPLAIN for that and the other Eloquent calls that hide an index, the Laravel rewrite for each, and why whereBetween() with startOfDay() and endOfDay() can match nothing.

### [Introducing Sailfish: Your MySQL performance_schema, Charted Over Time](https://boring-observability.dev/blog/introducing-sailfish.md)

Published 2026-10-23. performance_schema hands back one running total per counter, so an hour of full scans yesterday is invisible in it. Sailfish reads it every five minutes from your Laravel app and charts it: each index's reads, each table's scans, the server and finished transactions.
