LIMIT OFFSET is slow with a larger value used for paging in MySQL / MSSQL Server

Limit Offset is slow used for paging in MySQL/ MSSQL Server

In Mysql, we are using offset with a limit to use as paging to limit the data from the database but with a large limit of offset, the query performance will be down.

We can use the following possible solutions to increase the performance of paging SQL queries:

  • First solution for paging: we always use order by clause for paging with limit and offset clause.
For faster access, we should use the Order by on clustered index column, it will give the better results. If you cannot use then atleast non-cluster index but cluster index will give you better result in large set like limit or offset value 250000 or more.

Note: Use column in order by clause having clustered index
-- Firstname and employeeid has clustered index
select * from hr.employees order by firstname,employeeid LIMIT 20,30;

Second Solution for paging: We can send the next page number for the next data instead of that we can send the last row of current data that is fetched and use the condition in SQL query to fetch the next rows data.

Example:
select * from hr.employees 
order by firstname, employeeid 
limit 20,30;

Second Solution:
--Use the last row data of current page to fetch next data by defining where condition --it will work faster for paging. In example john, 127 is last row.
select * from hr.employees 
where (firstname,employeeid)  > ('John',127)
order by firstname, employeeid 
limit 30;

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.