MySQL for Developers

Efficiently sort, limit, and offset your results in MySQL

In this guide, we'll dive deep into sorting, limiting, and offsetting results in MySQL. While sorting may seem simple, it's important to understand how to do it efficiently and effectively to ensure that your queries are optimized. We'll go through some best practices and tips to help you sort, limit, and offset your results effectively.

Order your rows with caution

Sorting your rows is not free. It can take a significant amount of resources and time to sort large data sets, and thus, it's important to do it with caution. If you don't need your rows in a certain order, don't order them.

However, if you need to order your rows, it's essential to do it efficiently and effectively. In order to optimize your queries, you must understand how to use indexes to make sorting cheaper.

Limiting results

Limiting your result set is simple in MySQL. To limit your results to 10 rows, for example, you can use the following query:

SELECT * FROM people LIMIT 10;

Sorting results

To order your results in MySQL, you can use the ORDER BY clause. By default, MySQL sorts in ascending order. Here's an example:

SELECT id, birthday FROM people ORDER BY birthday;

This query will sort the rows by birthday in ascending order. You can also use the DESC keyword to sort in descending order:

SELECT id, birthday FROM people ORDER BY birthday DESC;

It's important to note that if you're sorting by a column that is not specific enough to be deterministic, MySQL gets to decide what order to return the rows in. For example, if you sort by birthday and two people have the same birthday, MySQL gets to decide the order in which they appear.

To make the sorting deterministic, you should add more columns to the ORDER BY clause. For example, you can add the id column, which is guaranteed to be unique:

SELECT id, birthday FROM people ORDER BY birthday, id;

This query will sort the rows by birthday first and then by ID, making the sorting deterministic.

Offset your results

To offset your results in MySQL, you can use the OFFSET clause. Let's say you want to skip the first 20 rows and return the next 100 rows. You can use the following query:

SELECT id, birthday FROM people ORDER BY birthday, id LIMIT 100 OFFSET 20;

It's important to note that when you use the OFFSET clause, the sorted result must be produced first. Whether it's done manually or using an index, the sorted result must be produced before the offset is applied. In the worst case scenario, the entire list must be produced, sorted, and then the offset is applied, which can be inefficient.

Conclusion

Limiting and offsetting your results is simple in MySQL, but be aware of the performance penalties that may come with using these clauses. In the end, understanding how to sort, limit, and offset your results in MySQL will help you optimize your queries and improve the overall performance of your database.

About this lesson

Often times you want your rows returned to you in a certain order. Here we'll talk about deterministic ordering and why it's so important.

6:11
Closed captioned

Feedback or questions? Reach out to our team at education@planetscale.com.