How to Optimize Paging in MySQL? 3 Best Ways

Paging or pagination is a common requirement for almost all web applications where all the documents are divided into discrete pages. This is the easiest way to select only what you need from the database.

However, optimizing paging operations is crucial to ensure efficient and fast retrieval of data in MySQL. So how do you optimize paging in MySQL? There is a technique named “deferred join” which is a great optimizing solution for more efficient pagination in MySQL.

In this article, we will explain the “deferred join” technique including the other 2 best ways to optimize pagination in MySQL. Let’s get started below.

Optimize Paging

3 Ways to Optimize Paging in MySQL

There are several ways to optimize paging in MySQL and among them, using a deferred join, paging without discarding records, and maintaining a place column is the 3 most effective way to optimize paging. Read on to explore them in detail.

1. Use Deferred Join

The “Deferred join” in MySQL is a great technique to optimize paging. Instead of the entire table on the database, you can make the pagination on a subset of data using this.

For example, you have a customer page with a record of 500 customers where only 10 customers are displayed on each page. Here, the query will use LIMIT to get 10 records and OFFSET to skip all the previous page results.

SELECT id, name, address, phone FROM customers ORDER BY name LIMIT 10 OFFSET 490;

With this, while you’re at the 50th page, it is doing LIMIT 10 OFFSET 490. In this way, the MySQL server has to go and read all the five hundred records, scan an index, retrieve rows by primary key id, and then discard them.

This is a lengthy process, and you can make it faster with the “deferred join” technique. It will only use the primary key to fetch data and it can be done by “using index” which is loved by most programmers.

SELECT idFROM customersORDER BY nameLIMIT 10 OFFSET 490;

Now, combine this using an INNER JOIN to get the ten rows and data you want:

SELECT id, name, address, phoneFROM customersINNER JOIN (SELECT idFROM customersORDER BY nameLIMIT 10 OFFSET 490)AS my_results USING(id);

Paging queries in SQL can be slow due to the frequent use of the OFFSET keyword. It simply makes the server scan, collect and discard unnecessary rows while fetching only a subset. By implementing deferred join or maintaining a designated position column, you can enhance the performance of your database significantly.

2. Try Paging Without Discarding Records

The main thing we have to do is avoid discarding records. The main target of optimizing for paging in MySQL is to prevent the server from fetching all the data. For this, you can try calling by ID.

  select id, name, address, phoneFROM customersWHERE id > 490ORDER BY id LIMIT 10;

However, this solution will only work if you were paging by ID.  If you’re paging by name, it might get messier as there may be multiple people with the same name. So, if ID doesn’t work for your application, you can try the USERNAME.

SELECT id, usernameFROM customersWHERE username > 'Justin'ORDER BY username LIMIT 10;

Isn’t this cool? Now, let’s try another trick!

3. Maintain A Column

Another way to optimize paging in MySQL is to maintain a column for the page. In this case, you have to update that column whenever you –

  1. INSERT a row
  2. DELETE a row 
  3. move a row with UPDATE.

Although this may not be suitable for a page, it can still make paging easier with a straight place or position.

SELECT id, name, address, phoneFROM customersWHERE page = 50ORDER BY name;

Or you can try with a place column like this:

SELECT id, name, address, phoneFROM customersWHERE place BETWEEN 490 AND 499ORDER BY name;

Frequently Asked Questions (FAQs)

What Is the Best Way to Do Pagination in MySQL?

The best way you can achieve pagination in MySQL is by implementing the LIMIT clause. While using the SELECT statement, the LIMIT clause will simply select a limited amount of data.

What Are The Different Ways To Optimize A MySQL Query?

You can optimize a MySQL query in different ways. For example, you can use the “ANALYZE TABLE table_name” to update the key distributions of the scanned table. You can use the Global and table-level STRAIGHT_JOIN, or you can turn global or thread-specific system variables.

How Do I Optimize My MySQL Database?

You can do several things to optimize the database in MySQL. For this, you have to understand your workload and optimize queries. You should never use MySQL as a Queue. Monitoring the fundamental resources and recognizing the scalability problems is the key to optimizing the MySQL database.


When you are dealing with large datasets, optimizing paging in MySQL is crucial for improving the performance of your web application. The three best ways to optimize for paging in MySQL are described in this article and we hope, now you can easily optimize paging in MySQL after implementing any of these. For further queries, our comment box is always open for you. Thanks for reading!

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *