![How brand design works at PlanetScale](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fhow-brand-design-works%2Fblog.jpg&w=3840&q=75)
How brand design works at PlanetScale
Learn how the Brand team designs and builds marketing experiences at PlanetScale.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fskully-paoli.jpg&w=256&q=75)
![Performant database tree traversal with Rails](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Frails-preload-tree-traversal%2FTree-traversal-blog.jpg&w=3840&q=75)
Performant database tree traversal with Rails
Learn how to solve a tree traversal N+1 query problem in your Rails application.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fmike-coutermarsh.jpeg&w=256&q=75)
![How PlanetScale keeps your data safe](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fhow-planetscale-keeps-your-data-safe%2Fplanetscale-keeps-your-data-safe_blog.png&w=3840&q=75)
How PlanetScale keeps your data safe
A detailed description of the multi-layered approach PlanetScale takes to ensure your data is safe.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fsam-lambert.jpeg&w=256&q=75)
![Datetimes versus timestamps in MySQL](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fdatetimes-vs-timestamps-in-mysql%2Fdatetime-vs-timestamps_blog.png&w=3840&q=75)
Datetimes versus timestamps in MySQL
Learn the differences between datetimes and timestamps in MySQL, the DATE, YEAR, and TIME columns, timezones, and when to use each.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Faaron-francis.jpg&w=256&q=75)
![Generated Hash Columns in MySQL](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fgenerated-hash-columns%2Fgenerated-hash-columns_blog.png&w=3840&q=75)
Generated Hash Columns in MySQL
Creating generated hash columns in MySQL for faster strict equality lookups.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Faaron-francis.jpg&w=256&q=75)
![Using redundant conditions to unlock indexes in MySQL](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fredundant-conditions%2Fredundant-blog.png&w=3840&q=75)
Using redundant conditions to unlock indexes in MySQL
Using redundant conditions as a method to unlock obfuscated indexes and improve performance in MySQL.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Faaron-francis.jpg&w=256&q=75)
![Character sets and collations in MySQL](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fmysql-charsets-collations%2Fcharsets-collations-mysql_blog.png&w=3840&q=75)
Character sets and collations in MySQL
Understanding the differences between character sets and collations in MySQL.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Faaron-francis.jpg&w=256&q=75)
![Backward compatible database changes](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fbackward-compatible-databases-changes%2Fbackward-compatible-databases-changes-blog.png&w=3840&q=75)
Backward compatible database changes
Learn about safely using the expand, migrate, and contract pattern to make database schema changes without downtime and data loss.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Ftaylor-barnett.jpg&w=256&q=75)
![Why isn’t MySQL using my index?](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fwhy-isnt-mysql-using-index%2Fmysql-not-using-index-blog.png&w=3840&q=75)
Why isn’t MySQL using my index?
There are several reasons why MySQL might not consider your index, and in this article we’ll explore some of the most common ones.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Faaron-francis.jpg&w=256&q=75)
![Serverless Laravel applications with AWS Lambda and PlanetScale](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Flaravel-bref-planetscale%2Flaravel-aws-lambda-blog.png&w=3840&q=75)
Serverless Laravel applications with AWS Lambda and PlanetScale
Learn how to create serverless Laravel applications by deploying them to AWS Lambda and using PlanetScale as the database.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fmatthieu-napoli.jpg&w=256&q=75)
![Database branching: three-way merge for schema changes](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fdatabase-branching-merge%2Fdatabase-branching-merge-blog.jpg&w=3840&q=75)
Database branching: three-way merge for schema changes
Learn how PlanetScale uses Git-like three-way diff to resolve schema change conflicts across database branches.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fshlomi-noach.jpg&w=256&q=75)
![Pagination in MySQL](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fmysql-pagination%2Fmysql-pagination-blog.png&w=3840&q=75)
Pagination in MySQL
An overview of the different ways to paginate in MySQL including limit/offset pagination and cursor pagination plus the pros and cons of each.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Faaron-francis.jpg&w=256&q=75)
![What is database sharding and how does it work?](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fhow-does-database-sharding-work%2Fhow-does-sharding-work-blog.png&w=3840&q=75)
What is database sharding and how does it work?
Learn what database sharding is, how sharding works, and some common sharding frameworks and tools.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fjustin-gage.jpeg&w=256&q=75)
![Connection pooling in Vitess](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fconnection-pooling%2Fconnection-pooling-blog.jpg&w=3840&q=75)
Connection pooling in Vitess
Connection pooling reduces the overhead of establishing new database connections. Learn how connection pooling works and how it is handled in Vitess.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fharshit-gangal.jpeg&w=256&q=75)
![Zero downtime Rails migrations with the PlanetScale Rails gem](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fzero-downtime-rails-migrations%2Fplanetscale-rails-blog.jpg&w=3840&q=75)
Zero downtime Rails migrations with the PlanetScale Rails gem
Learn about the Ruby on Rails workflow that protects your database and application from accidental downtime and data loss.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fmike-coutermarsh.jpeg&w=256&q=75)
![What are the disadvantages of database indexes?](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fdisadvantages-of-database-indexes%2Fdownsides-of-indexes-blog.jpg&w=3840&q=75)
What are the disadvantages of database indexes?
Learn about some of the possible downsides of using database indexes and how to remove unused database indexes in MySQL.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fjd-lien.jpeg&w=256&q=75)
![Solving N+1’s with Rails `exists?` queries](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Frails-n1s-exists%2Fblog-rails-n-plus-1s-exists.jpg&w=3840&q=75)
Solving N+1’s with Rails `exists?` queries
Learn how to solve your Rails applications N+1’s caused by `exists?` queries.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fmike-coutermarsh.jpeg&w=256&q=75)
![Faster MySQL with HTTP/3](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Ffaster-mysql-with-http3%2Fblog-faster-mysql-with-http3.jpg&w=3840&q=75)
Faster MySQL with HTTP/3
In this article we explore how our HTTP/3 API compares to the latency of a traditional MySQL client.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fmatt-robenolt.png&w=256&q=75)
![What is a query planner?](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fwhat-is-a-query-planner%2Fblog-query-planner.jpg&w=3840&q=75)
What is a query planner?
Learn how query planning works and why query planners are important.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fandres-taylor.jpg&w=256&q=75)
![Temporal workflows at scale: Part 2 — Sharding in production](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Ftemporal-workflows-at-scale-sharding-in-production%2Fblog-temporal-workflows-part2.jpg&w=3840&q=75)
Temporal workflows at scale: Part 2 — Sharding in production
Learn how PlanetScale simplifies the process of running Temporal in production by looking at how our customer runs heavy production workloads.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fsavannah-longoria.jpg&w=256&q=75)
![Rails’ safety mechanisms](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Frails-safety-mechanisms%2Frails-safety-mechanisms-blog.jpg&w=3840&q=75)
Rails’ safety mechanisms
A comprehensive overview of Rails’ many safety features that can help you prevent painful mistakes.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fjason-charnes.jpg&w=256&q=75)
![Building a multi-region Rails application with PlanetScale](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Frails-multi-region-database%2Fblog-multi-region-rails-app.jpg&w=3840&q=75)
Building a multi-region Rails application with PlanetScale
Learn how to configure your database in a multi-region Rails application to decrease latency across the globe.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fmike-coutermarsh.jpeg&w=256&q=75)
![How PlanetScale Boost serves your SQL queries instantly](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fboost-vmg-engineering%2Fblog-boost-eng-vmg.jpg&w=3840&q=75)
How PlanetScale Boost serves your SQL queries instantly
Learn how we use a partial materialization engine for database caching alongside your database.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fvicent-marti.png&w=256&q=75)
![One million connections](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fone-million-connections%2Fone-million-connections-blog.jpg&w=3840&q=75)
One million connections
Learn how to use PlanetScale to safely include your database in your serverless functions without hitting connection limits in MySQL.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fliz-van-dijk.jpg&w=256&q=75)
![MySQL Integers: INT BIGINT and more](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fmysql-data-types-integers%2Fmysql-integers-blog.jpg&w=3840&q=75)
MySQL Integers: INT BIGINT and more
Gain a deeper understanding of the MySQL integer types by exploring the different options (INT BIGINT MEDIUMINT etc) and how they are stored.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fbrian-morrison.jpeg&w=256&q=75)
![What is Vitess: resiliency, scalability, and performance](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fvitess-for-the-rest-of-us%2Fvitess-for-the-rest-of-us-blog.png&w=3840&q=75)
What is Vitess: resiliency, scalability, and performance
Learn what Vitess is, how it works, and how it can improve your database‘s resilience, scalability, and performance.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fbrian-morrison.jpeg&w=256&q=75)
![Laravel’s safety mechanisms](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Flaravel-safety-mechanisms%2Flaravel-safety-mechanisms-blog.png&w=3840&q=75)
Laravel’s safety mechanisms
A comprehensive overview of Laravel’s many safety features that can help you prevent painful mistakes.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Faaron-francis.jpg&w=256&q=75)
![Optimizing queries in arewefastyet](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Farewefastyet-query-optimization-with-insights%2Foptimizing-queries-insights-blog.png&w=3840&q=75)
Optimizing queries in arewefastyet
Learn how we detected and optimized two slow queries in arewefastyet using PlanetScale Insights.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fflorent-poinsard.jpeg&w=256&q=75)
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fharshit-gangal.jpeg&w=256&q=75)
![Indexing JSON in MySQL](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Findexing-json-in-mysql%2Findexing-json-in-mysql-blog.png&w=3840&q=75)
Indexing JSON in MySQL
Learn how to index JSON in MySQL with generated columns and functional indexes.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Faaron-francis.jpg&w=256&q=75)