<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/tags/mysql/best-of/2024" -->

---
title: Best MySQL posts of 2024 | daily.dev
description: The most upvoted MySQL posts of 2024, curated by the daily.dev community.
canonical: https://daily.dev/tags/mysql/best-of/2024
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:url: https://daily.dev/tags/mysql/best-of/2024
og:type: website
og:site_name: daily.dev
og:title: Best MySQL posts of 2024 | daily.dev
og:description: The most upvoted MySQL posts of 2024, curated by the daily.dev community.
og:image: https://media.daily.dev/image/upload/s--VAY5ToZt--/f_auto/v1724209435/public/daily.dev%20-%20open%20graph
---

# Best of MySQL — 2024

1. 1  
[](/posts/stop-using-count-id-to-count-rows-vlrnmqlzw "Stop using COUNT(id) to count rows")  
Video  
![Avatar of community](https://media.daily.dev/image/upload/t_logo,f_auto/v1655817725/logos/community)Community Picks · 3y  
Stop using COUNT(id) to count rows  
Counting rows using COUNT(\*) in MySQL is not slow as often believed. It is actually optimized to be the fastest way to count rows.  
790  
27
2. 2  
[](/posts/mysql-visual-explain-bb9s4esqc "MySQL Visual Explain")  
Article  
![Avatar of community](https://media.daily.dev/image/upload/t_logo,f_auto/v1655817725/logos/community)Community Picks · 2y  
MySQL Visual Explain  
Investigate slow query performance through a simple visualization tool instead of deciphering MySQL's complex EXPLAIN output. Most developers find EXPLAIN difficult to read because it was designed for internal use by MySQL developers to debug and tune query execution.  
561  
13
3. 3  
[](/posts/mastering-sql-joins-jahppabsg "🐼 Mastering SQL Joins")  
Article  
![Avatar of gc](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/gc)gitconnected · 3y  
🐼 Mastering SQL Joins  
This post explores the concept of table joins in SQL, covering different join types such as inner join, left join, and right join. It also discusses how to identify and handle orphan records in a database.  
445  
5
4. 4  
[](/posts/chartdb-jdsi3ker8 "ChartDB")  
Article  
![Avatar of hn](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/hn)Hacker News · 2y  
ChartDB  
ChartDB is a free and open-source database design editor that simplifies the creation of database diagrams. It allows users to import, edit, and export database schemas using a single query, supporting popular relational DBMS like MySQL, MariaDB, PostgreSQL, Microsoft SQL Server, and SQL Lite. Features include a visual query editor, the ability to add tables and notes, and exporting diagrams as SQL scripts or images.  
335  
12
5. 5  
[](/posts/outerbase-studio-a-lightweight-database-gui-in-your-browser-it-supports-connecting-to-postgres-my-ydjrxwmuu "outerbase/studio: A lightweight Database GUI in your browser. It supports connecting to Postgres, MySQL, and SQLite.")  
Article  
![Avatar of hn](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/hn)Hacker News · 2y  
outerbase/studio: A lightweight Database GUI in your browser. It supports connecting to Postgres, MySQL, and SQLite.  
Outerbase Studio is a lightweight, browser-based GUI for managing SQL databases, initially built for LibSQL and SQLite but now supporting a range of databases including MySQL and PostgreSQL. It features a user-friendly query editor, a powerful data editor, a schema editor, and a flexible connection manager. The desktop apps for Windows and Mac offer additional support for drivers not feasible in a browser environment.  
220  
3
6. 6  
[](/posts/when-to-use-sql-vs-nosql-mwipbejry "When to use SQL vs NoSQL")  
Article  
![Avatar of devto](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/devto)DEV · 2y  
When to use SQL vs NoSQL  
Choosing between SQL and NoSQL databases can be daunting. SQL excels in data consistency and complex querying, while NoSQL offers scalability and flexibility. Common misconceptions include inflexibility of SQL databases and the lack of transactional support in NoSQL.  
166  
2
7. 7  
[](/posts/generate-entity-relationship-diagrams-with-laravel-4mp5ae4ey "Generate Entity-Relationship Diagrams with Laravel")  
Article  
![Avatar of ln](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/ln)Laravel News · 2y  
Generate Entity-Relationship Diagrams with Laravel  
The Laravel ERD package allows for automatic generation of Entity-Relationship Diagrams from Laravel models with ease and provides visually appealing results. It offers advanced instructions for excluding tables and generating SVG files. While still under development, users can find installation and usage instructions on GitHub.  
139  
4
8. 8  
[](/posts/how-shopify-manages-its-petabyte-scale-mysql-database-trzmxmxwl "How Shopify Manages its Petabyte Scale MySQL Database")  
Article  
![Avatar of bytebytego](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/35be29234ee14d01a9cd049c52e12753)ByteByteGo · 2y  
How Shopify Manages its Petabyte Scale MySQL Database  
Shopify handles its petabyte-scale MySQL database using innovative techniques to ensure zero downtime, maintain read consistency, and implement efficient backup and restore processes. Shard balancing is used to distribute traffic loads efficiently across database instances. Ghostferry, an in-house tool, assists in database migration with minimal disruption. Data replication is managed to minimize lag, ensuring time-sensitive reads are accurate. Finally, Shopify leverages Google Cloud Platform's persistent disk snapshots for fast and reliable database backups and restores.  
122  
1
9. 9  
[](/posts/say-goodbye-to-junior-engineering-roles-r9wjphczc "Say goodbye to "junior" engineering roles")  
Article  
![Avatar of stackov](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/003e14873238469caea60ebdd34508ae)Stack Overflow Blog · 2y  
Say goodbye to "junior" engineering roles  
Snapshot Reviews aim to evaluate a software team's overall activity using AI to measure task complexity and output. Tasks are rated by difficulty, affecting the productivity scores. This method attempts to provide a balanced view of a developer's contributions beyond mere activity logs.  
111  
23
10. 10  
[](/posts/visual-explain-for-mysql-and-laravel-1q0zx0ta9 "Visual EXPLAIN for MySQL and Laravel")  
Article  
![Avatar of ln](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/ln)Laravel News · 2y  
Visual EXPLAIN for MySQL and Laravel  
The MySQL Visual Explain tool by Tobias Petry simplifies the analysis of slow queries by providing a visual representation of MySQL's EXPLAIN output. An API and a Laravel package are available, adding methods to the query builder and offering various options to visualize and debug queries easily.  
111
11. 11  
[](/posts/b-trees-and-database-indexes-gvsplicyu "B-trees and database indexes")  
Article  
![Avatar of planetscale](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/09515c29cafc45618b3f117eab4fccf8)PlanetScale · 2y  
B-trees and database indexes  
B-trees and B+ trees are essential for efficient data lookups in database management systems like MySQL, Postgres, and MongoDB. They are structured to store key/value pairs in a way that optimizes search operations. MySQL's InnoDB engine relies heavily on B+ trees, where the choice of primary key significantly impacts performance. B-trees are well-suited for large data volumes that need persistent disk storage, and B+ trees offer advantages like storing all values at the leaf level and having linked lists for faster sequential access. Sequential keys generally improve performance over random or UUID keys.  
99  
2
12. 12  
[](/posts/mastering-data-modeling-a-step-by-step-guide-7pxqovpqw "Mastering Data Modeling : A Step-by-Step Guide")  
Article  
![Avatar of towardsdev](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/2c710db2750a4a70835862534cb7c9d4)Towards Dev · 2y  
Mastering Data Modeling : A Step-by-Step Guide  
Database modeling involves three main phases: conceptual, logical, and physical. The conceptual phase defines high-level business requirements and uses tools like entity-relationship diagrams (ERDs) to represent entities and relationships. The logical phase focuses on normalizing data to eliminate redundancies and improve integrity, while the physical phase implements the design in a specific database system, considering storage structures and indexing strategies. Effective data modeling ensures a well-organized and efficient database structure.  
82
13. 13  
[](/posts/an-elegant-nodejs-framework-fusmagn6j "An Elegant NodeJS framework")  
Article  
![Avatar of community](https://media.daily.dev/image/upload/t_logo,f_auto/v1655817725/logos/community)Community Picks · 2y  
An Elegant NodeJS framework  
Enhance your application's performance with this NodeJS framework that offers multi-store Redis and in-memory cache configuration. It supports MySQL and Postgres databases with a declarative syntax. Built-in error handling, Sentry integration, and elegant APIs for AWS S3 and local storage streamline your development process. The framework also features localization, message queues, a powerful code generation tool, and an integrated HTML mail template system.  
77  
16
14. 14  
[](/posts/how-to-implement-a-distributed-lock-using-redis-er1n85556 "How to implement a Distributed Lock using Redis")  
Article  
![Avatar of java_libhunt](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/7729929f2ca649d7b13f6b04aa94d300)Awesome Java Newsletter · 2y  
How to implement a Distributed Lock using Redis  
Handling critical sections in distributed systems can be complex, especially when multiple instances might update the same database. Implementing distributed locking ensures that only one instance performs a critical operation at any given time. Using Redis, both single-instance and Redlock algorithms provide solutions, although they come with their own challenges, such as handling failover in master-replica setups.  
65  
1
15. 15  
[](/posts/scaling-laravel-to-100m-jobs-and-30-000-requests-nrj4bjjis "Scaling Laravel to 100M+ jobs and 30,000 requests")  
Article  
![Avatar of community](https://media.daily.dev/image/upload/t_logo,f_auto/v1655817725/logos/community)Community Picks · 2y  
Scaling Laravel to 100M+ jobs and 30,000 requests  
This post tells the story of scaling a Laravel app to handle over 100 million jobs and 30,000 requests per minute using Laravel, MySQL, and Redis.  
56  
1
16. 16  
[](/posts/learn-sql-beginner-to-advanced-in-under-4-hours-v79brkg1n "Learn SQL Beginner to Advanced in Under 4 Hours")  
Video  
![Avatar of youtube](https://media.daily.dev/image/upload/s--W5zMumpP--/f_auto/v1725350181/logos/youtube)YouTube · 2y  
Learn SQL Beginner to Advanced in Under 4 Hours  
This post provides a comprehensive SQL tutorial, covering everything from setting up the MySQL environment to fundamental and advanced SQL topics. It includes exercises on data selection, querying, data cleaning, and exploratory data analysis, with two practical projects at the end. The tutorial is designed for beginners and progresses to advanced topics such as CTEs and temp tables.  
48
17. 17  
[](/posts/the-internals-of-a-primary-index-ekwvizuvz "The Internals of a Primary Index")  
Article  
![Avatar of hnasr](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/afd3cb0661b54386bbe31c04f5efe0dc)Hussein Nasser · 2y  
The Internals of a Primary Index  
A primary key uniquely identifies a row and is typically indexed for fast access. Primary indexes are often clustered, meaning they store full rows. Secondary indexes only store row identifiers, requiring an additional lookup of the primary key to retrieve full rows. Postgres is an exception as it does not use a real primary clustered index; all indexes, including primary, point to the row identifier or tuple id. The tuple id in Postgres is unique and allows direct row access with minimal I/O.  
44
18. 18  
[](/posts/how-youtube-was-able-to-support-2-49-billion-users-with-mysql-5lf7wy7ui "How YouTube Was Able to Support 2.49 Billion Users With MySQL")  
Article  
![Avatar of community](https://media.daily.dev/image/upload/t_logo,f_auto/v1655817725/logos/community)Community Picks · 2y  
How YouTube Was Able to Support 2.49 Billion Users With MySQL  
YouTube used the Vitess MySQL combination to support 2.49 billion users, overcoming scalability issues. Vitess provides an abstraction layer on top of MySQL for simplicity and scalability, using components like VTGate, VTTablet, and a key-value database.  
45  
1
19. 19  
[](/posts/why-uuid7-is-better-than-uuid4-as-clustered-index-jrsu85xhr "Why UUID7 is better than UUID4 as clustered index")  
Article  
![Avatar of medium_js](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/medium)Medium · 3y  
Why UUID7 is better than UUID4 as clustered index  
This post discusses the differences between UUID version 4 and UUID version 7 as clustered indexes in a database. It explores the pros and cons of using UUIDs instead of sequential IDs and explains why UUID version 7 was faster than UUID version 4\. The experiments and results are presented, along with an explanation of index locality and buffer pool in relation to the performance differences.  
44
20. 20  
[](/posts/is-it-time-to-ditch-mysql-and-postgresql-for-sqlite--3vew53rmz "Is it time to ditch MySQL and PostgreSQL for SQLite?")  
Article  
![Avatar of freek](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/286e833d1aaa453d99849cd4dbb7a106)FREEK.DEV · 3y  
Is it time to ditch MySQL and PostgreSQL for SQLite?  
Evaluate the potential of SQLite as a replacement for MySQL and PostgreSQL in production web applications.  
43  
5
21. 21  
[](/posts/dockerizing-a-golang-api-with-mysql-and-adding-docker-compose-support-suogsx7zg "Dockerizing a Golang API with MySQL and adding Docker Compose Support")  
Article  
![Avatar of community](https://media.daily.dev/image/upload/t_logo,f_auto/v1655817725/logos/community)Community Picks · 2y  
Dockerizing a Golang API with MySQL and adding Docker Compose Support  
Developing and testing APIs locally with databases can be streamlined using Docker. This guide shows how to Dockerize a Golang API with MySQL, leveraging best practices like using lighter base images, multi-stage builds, creating binaries, and breaking down layers. It also covers how to set up Docker Compose to manage the API and MySQL containers, ensuring seamless integration and easy management.  
43  
2
22. 22  
[](/posts/apis-with-node-js-and-express-course-in-spanish-for-beginners-gdtkab354 "APIs with Node.js and Express – Course in Spanish for Beginners")  
Article  
![Avatar of freecodecamp](https://media.daily.dev/image/upload/t_logo,f_auto/v1628412854/logos/freecodecamp)freeCodeCamp · 2y  
APIs with Node.js and Express – Course in Spanish for Beginners  
Learn how to develop REST APIs step by step with TypeScript, Node.js, Express, MySQL, and TypeORM. Discover career opportunities in web development with these technologies.  
43  
1
23. 23  
[](/posts/servbay-1-4-0-released-with-mysql-support-enhanced-management-interfaces-and-more-w2scebljj "ServBay 1.4.0 released with MySQL support, enhanced management interfaces, and more")  
Article  
![Avatar of alternativeto](https://media.daily.dev/image/upload/s--N6EWbqZj--/f_auto/v1721572690/logos/alternativeto)AlternativeTo · 2y  
ServBay 1.4.0 released with MySQL support, enhanced management interfaces, and more  
ServBay 1.4.0 introduces MySQL support (versions 5.1 to 9.0), a new service management interface, graphical configuration options for MySQL, MariaDB, and Redis, and the ability to set MySQL or MariaDB as the default SQL server. The update enhances host configuration with rewrite rules for Laravel and WordPress and supports multiple domains per host. It also adds a one-click Redis cache clear feature, improved login error messages, and updates the ServBay runtime for better stability. Upgrades can be done automatically via the app or manually by downloading the installer.  
41
24. 24  
[](/posts/building-an-url-shortener-with-bun-oadcdpc9b "Building an URL Shortener with Bun")  
Article  
![Avatar of asayer](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/be8d9d38650943c8a1718ba79f23e9ac)asayer · 2y  
Building an URL Shortener with Bun  
Learn how to build a URL shortener using Bun, Elysia, and MySQL. Understand the process of converting long URLs into shorter URLs and how to implement features like analytics. Set up your development environment, create data models, and implement the URL-shortening logic.  
39
25. 25  
[](/posts/how-to-use-object-relational-mapping-in-node-js-optimize-database-interactions-with-sequelize-orm-1kqimu0x6 "How to Use Object Relational Mapping in Node.js – Optimize Database Interactions With Sequelize ORM")  
Article  
![Avatar of freecodecamp](https://media.daily.dev/image/upload/t_logo,f_auto/v1628412854/logos/freecodecamp)freeCodeCamp · 2y  
How to Use Object Relational Mapping in Node.js – Optimize Database Interactions With Sequelize ORM  
Databases are crucial for applications, and Object Relational Mapping (ORM) helps streamline their communications. This post explains ORM, its benefits like reduced data manipulation risks and easier database interaction, and demonstrates using Sequelize ORM with a Node.js and MySQL setup. Key steps include setting up a Node.js server, integrating Sequelize, and building a project with CRUD operations. Practical examples are provided to illustrate how ORM improves database management.  
36  
1

[See all MySQL archives](/tags/mysql/best-of)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@graph":[{"@type":"CollectionPage","@id":"https://daily.dev/tags/mysql/best-of/2024#page","url":"https://daily.dev/tags/mysql/best-of/2024","name":"Best MySQL Posts of 2024","description":"The most upvoted MySQL posts of 2024, curated by the daily.dev community.","isPartOf":{"@type":"WebSite","url":"https://daily.dev"}},{"@type":"ItemList","@id":"https://daily.dev/tags/mysql/best-of/2024#items","numberOfItems":25,"itemListElement":[{"@type":"ListItem","position":1,"url":"https://daily.dev/posts/stop-using-count-id-to-count-rows-vlrnmqlzw","name":"Stop using COUNT(id) to count rows"},{"@type":"ListItem","position":2,"url":"https://daily.dev/posts/mysql-visual-explain-bb9s4esqc","name":"MySQL Visual Explain"},{"@type":"ListItem","position":3,"url":"https://daily.dev/posts/mastering-sql-joins-jahppabsg","name":"🐼 Mastering SQL Joins"},{"@type":"ListItem","position":4,"url":"https://daily.dev/posts/chartdb-jdsi3ker8","name":"ChartDB"},{"@type":"ListItem","position":5,"url":"https://daily.dev/posts/outerbase-studio-a-lightweight-database-gui-in-your-browser-it-supports-connecting-to-postgres-my-ydjrxwmuu","name":"outerbase/studio: A lightweight Database GUI in your browser. It supports connecting to Postgres, MySQL, and SQLite."},{"@type":"ListItem","position":6,"url":"https://daily.dev/posts/when-to-use-sql-vs-nosql-mwipbejry","name":"When to use SQL vs NoSQL"},{"@type":"ListItem","position":7,"url":"https://daily.dev/posts/generate-entity-relationship-diagrams-with-laravel-4mp5ae4ey","name":"Generate Entity-Relationship Diagrams with Laravel"},{"@type":"ListItem","position":8,"url":"https://daily.dev/posts/how-shopify-manages-its-petabyte-scale-mysql-database-trzmxmxwl","name":"How Shopify Manages its Petabyte Scale MySQL Database"},{"@type":"ListItem","position":9,"url":"https://daily.dev/posts/say-goodbye-to-junior-engineering-roles-r9wjphczc","name":"Say goodbye to \"junior\" engineering roles"},{"@type":"ListItem","position":10,"url":"https://daily.dev/posts/visual-explain-for-mysql-and-laravel-1q0zx0ta9","name":"Visual EXPLAIN for MySQL and Laravel"},{"@type":"ListItem","position":11,"url":"https://daily.dev/posts/b-trees-and-database-indexes-gvsplicyu","name":"B-trees and database indexes"},{"@type":"ListItem","position":12,"url":"https://daily.dev/posts/mastering-data-modeling-a-step-by-step-guide-7pxqovpqw","name":"Mastering Data Modeling : A Step-by-Step Guide"},{"@type":"ListItem","position":13,"url":"https://daily.dev/posts/an-elegant-nodejs-framework-fusmagn6j","name":"An Elegant NodeJS framework"},{"@type":"ListItem","position":14,"url":"https://daily.dev/posts/how-to-implement-a-distributed-lock-using-redis-er1n85556","name":"How to implement a Distributed Lock using Redis"},{"@type":"ListItem","position":15,"url":"https://daily.dev/posts/scaling-laravel-to-100m-jobs-and-30-000-requests-nrj4bjjis","name":"Scaling Laravel to 100M+ jobs and 30,000 requests"},{"@type":"ListItem","position":16,"url":"https://daily.dev/posts/learn-sql-beginner-to-advanced-in-under-4-hours-v79brkg1n","name":"Learn SQL Beginner to Advanced in Under 4 Hours"},{"@type":"ListItem","position":17,"url":"https://daily.dev/posts/the-internals-of-a-primary-index-ekwvizuvz","name":"The Internals of a Primary Index"},{"@type":"ListItem","position":18,"url":"https://daily.dev/posts/how-youtube-was-able-to-support-2-49-billion-users-with-mysql-5lf7wy7ui","name":"How YouTube Was Able to Support 2.49 Billion Users With MySQL"},{"@type":"ListItem","position":19,"url":"https://daily.dev/posts/why-uuid7-is-better-than-uuid4-as-clustered-index-jrsu85xhr","name":"Why UUID7 is better than UUID4 as clustered index"},{"@type":"ListItem","position":20,"url":"https://daily.dev/posts/is-it-time-to-ditch-mysql-and-postgresql-for-sqlite--3vew53rmz","name":"Is it time to ditch MySQL and PostgreSQL for SQLite?"},{"@type":"ListItem","position":21,"url":"https://daily.dev/posts/dockerizing-a-golang-api-with-mysql-and-adding-docker-compose-support-suogsx7zg","name":"Dockerizing a Golang API with MySQL and adding Docker Compose Support"},{"@type":"ListItem","position":22,"url":"https://daily.dev/posts/apis-with-node-js-and-express-course-in-spanish-for-beginners-gdtkab354","name":"APIs with Node.js and Express – Course in Spanish for Beginners"},{"@type":"ListItem","position":23,"url":"https://daily.dev/posts/servbay-1-4-0-released-with-mysql-support-enhanced-management-interfaces-and-more-w2scebljj","name":"ServBay 1.4.0 released with MySQL support, enhanced management interfaces, and more"},{"@type":"ListItem","position":24,"url":"https://daily.dev/posts/building-an-url-shortener-with-bun-oadcdpc9b","name":"Building an URL Shortener with Bun"},{"@type":"ListItem","position":25,"url":"https://daily.dev/posts/how-to-use-object-relational-mapping-in-node-js-optimize-database-interactions-with-sequelize-orm-1kqimu0x6","name":"How to Use Object Relational Mapping in Node.js – Optimize Database Interactions With Sequelize ORM"}]},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Tags","item":"https://daily.dev/tags"},{"@type":"ListItem","position":3,"name":"MySQL","item":"https://daily.dev/tags/mysql"},{"@type":"ListItem","position":4,"name":"Best of","item":"https://daily.dev/tags/mysql/best-of"},{"@type":"ListItem","position":5,"name":"2024"}]}]}
```

