The three status fields people read all measure something slightly different from what the question was, and knowing which is which is the difference between a useful alert…
The outbox is the smallest correct answer to the dual write problem, and the implementation is one insert and a worker. The index on (published_at, id) is what…
Every option with autoload set to yes is fetched in one query on every page load, so a plugin storing a megabyte there makes every request slower forever.…
Dropping an index that turns out to be load-bearing means rebuilding it on a large table under pressure, which is why unused-looking indexes survive for years. A week…
The character set MySQL calls utf8 stores at most three bytes per character, which excludes emoji and several CJK ranges — and the failure is a truncated string…
Eager loading an entire relation to display one field from the most recent row is a hydration of every row in that relation, per parent. The result is…
8.0 defaults to utf8mb4_0900_ai_ci and a table converted from 5.7 is almost certainly utf8mb4_general_ci — and joining two columns with different collations cannot use an index on either.…
Almost every MySQL tuning guide lists forty variables, and on a dedicated server the first one accounts for most of the difference — it is the cache that…