![Safely making database schema changes](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fsafely-making-database-schema-changes%2Fsafe-db-schema-changes-social-blog.jpg&w=3840&q=75)
Safely making database schema changes
How to prevent schema changes from being scary with database best practices and PlanetScale.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Ftaylor-barnett.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)
![An update to our workflow: safe migrations](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fsafe-migrations%2Fsafe-migrations-blog.png&w=3840&q=75)
An update to our workflow: safe migrations
Learn about our latest update safe migrations and how it affects our branching workflow.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fnick-van-wiggeren.jpeg&w=256&q=75)
![Announcing the PlanetScale GitHub Actions](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fannouncing-the-planetscale-github-actions%2Fannouncing-the-planetscale-github-actions-blog.jpg&w=3840&q=75)
Announcing the PlanetScale GitHub Actions
Easily integrate common PlanetScale operations directly into your GitHub Actions Workflows.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fbrian-morrison.jpeg&w=256&q=75)
![How to read MySQL EXPLAINs](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fmysql-explains%2Fhow-to-read-mysql-explain-blog.png&w=3840&q=75)
How to read MySQL EXPLAINs
Learn how to read the output in MySQL EXPLAIN plans so you can utilize them to improve query performance.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fsavannah-longoria.jpg&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)
![How to Upgrade from MySQL 5.7 to 8.0](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fupgrading-mysql%2Fupgrading-mysql-blog.png&w=3840&q=75)
How to Upgrade from MySQL 5.7 to 8.0
Learn what you should look out for when upgrading an existing database from MySQL 5.7 to 8 and how to change your database to be compatible with the new version.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fjd-lien.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)
![Build a products listing application with Golang and MySQL](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fbuild-products-listing-app-golang-mysql%2Fgolang-mysql-blog.png&w=3840&q=75)
Build a products listing application with Golang and MySQL
Learn how to build a products listing application with Golang and a MySQL database.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Folususi-oluyemi.jpeg&w=256&q=75)
![Introducing the Issues Calendar for GitHub Projects](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fintroducing-the-issues-calendar-for-github-projects%2Fintroducing-the-issues-calendar-for-github-projects-blog.png&w=3840&q=75)
Introducing the Issues Calendar for GitHub Projects
Use this open source GitHub integration to view your GitHub project issues in a customizable calendar.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fbrian-morrison.jpeg&w=256&q=75)
![Build a user management API with Nest.js and MySQL](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fbuild-a-user-management-api-with-nestjs-mysql%2Fuser-management-api-nest-mysql-blog.jpg&w=3840&q=75)
Build a user management API with Nest.js and MySQL
Learn how to build a Nest.js API connect it to a MySQL database add a schema and data and and run database queries.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Folususi-oluyemi.jpeg&w=256&q=75)
![Using MySQL with SQLAlchemy: Hands-on Examples](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fmysql-sqlalchemy%2Fmysql-sqlachemy-blog.png&w=3840&q=75)
Using MySQL with SQLAlchemy: Hands-on Examples
Learn how to using Python SQLAlchemy with MySQL by working through an example of creating tables, inserting data, and querying data with both raw SQL and SQLAlchemy ORM.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fanthony-herbert.jpeg&w=256&q=75)
![Improvements to database branch pages](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fimprovements-to-database-branch-pages%2Fbranch-improvements-blog.jpg&w=3840&q=75)
Improvements to database branch pages
Learn about some of the latest enhancements we made to the Branching page in the PlanetScale dashboard.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fjason-long.jpeg&w=256&q=75)
![Announcing Vitess 16](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fannouncing-vitess-16%2Fvitess-version-16-blog.jpg&w=3840&q=75)
Announcing Vitess 16
Vitess 16 is now generally available with updates to VDiff v2 VTOrc MySQL compatibility and more.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fvitess-engineering-team.png&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)
![Migrating from Postgres to MySQL](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fmigrating-from-postgres-to-mysql%2Fmigrating-from-postgres-to-mysql-blog.png&w=3840&q=75)
Migrating from Postgres to MySQL
Learn how to migrate from Postgres to MySQL Postgres vs MySQL incompatibilities and more.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fadnan-kukic.jpeg&w=256&q=75)
![Introducing the PlanetScale API and OAuth applications](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fintroducing-planetscale-api-and-oauth-applications%2Fblog-api-oauth.jpeg&w=3840&q=75)
Introducing the PlanetScale API and OAuth applications
Manage your databases programmatically with the PlanetScale API.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Ffrances-thai.jpg&w=256&q=75)
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Ftaylor-barnett.jpg&w=256&q=75)
![Common MySQL errors and how to fix them](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fcommon-mysql-errors%2Fcommon-mysql-errors-blog.png&w=3840&q=75)
Common MySQL errors and how to fix them
An overview of some common MySQL error codes you may run into what they mean and how to solve them.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fmary-gathoni.jpeg&w=256&q=75)
![What is the N+1 Query Problem and How to Solve it?](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fwhat-is-n-1-query-problem-how-to-solve%2Fblog-n-1-problem.jpg&w=3840&q=75)
What is the N+1 Query Problem and How to Solve it?
Learn what the N+1 queries problem is by working through an example N+1 query updating it to a JOIN statement and going over how to identify them in the future.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fjd-lien.jpeg&w=256&q=75)
![Support’s notes from the field](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fsupports-notes-from-the-field%2Fblog-support-notes.jpg&w=3840&q=75)
Support’s notes from the field
A quick glimpse on Support at PlanetScale and the issues we see the most often.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fmike-stojan.jpg&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)
![Secure your connection string with AWS KMS](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fsecure-your-connection-string-with-aws-kms%2Fblog-aws-kms.jpg&w=3840&q=75)
Secure your connection string with AWS KMS
Learn how to encrypt your connection strings so that not even AWS can access them.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fbrian-morrison.jpeg&w=256&q=75)
![All of the tech PlanetScale replaces](/_next/image?url=%2Fassets%2Fblog%2Fcontent%2Fall-the-tech-planetscale-replaces%2Fblog-tech-psdb-replaces.jpg&w=3840&q=75)
All of the tech PlanetScale replaces
PlanetScale is more than just a drop-in replacement for MySQL. Learn about everything PlanetScale can do for you
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fbrian-morrison.jpeg&w=256&q=75)
![PlanetScale and HIPAA](/_next/image?url=%2Fassets%2Fsocial%2Fblog-logo.jpeg&w=3840&q=75)
PlanetScale and HIPAA
PlanetScale can now enter into Business Associate Agreements (BAA) with customers on an Enterprise plan.
![](/_next/image?url=%2Fassets%2Fblog%2Fauthors%2Fsam-kottler.jpg&w=256&q=75)