OFFSET for pagination in SQL - Time & Space Complexity
When using OFFSET for pagination, we want to know how the time to get results changes as the page number grows.
How does skipping rows affect the work the database does?
Analyze the time complexity of the following code snippet.
SELECT *
FROM products
ORDER BY product_id
LIMIT 10 OFFSET 50;
This query fetches 10 products but skips the first 50 rows, simulating page 6 of results.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: The database scans or reads rows up to the OFFSET number before returning the next rows.
- How many times: It processes all rows before the OFFSET plus the LIMIT rows to return.
As the OFFSET number grows, the database must skip more rows before returning results.
| Input Size (OFFSET) | Approx. Operations |
|---|---|
| 10 | Reads about 20 rows (10 skipped + 10 returned) |
| 100 | Reads about 110 rows (100 skipped + 10 returned) |
| 1000 | Reads about 1010 rows (1000 skipped + 10 returned) |
Pattern observation: The work grows roughly linearly with the OFFSET value.
Time Complexity: O(n)
This means the time to get results grows in direct proportion to how many rows you skip.
[X] Wrong: "OFFSET just jumps to the page instantly, so time stays the same no matter the page."
[OK] Correct: The database still reads and skips rows before the OFFSET, so more skipping means more work.
Understanding how OFFSET affects query time helps you write better pagination queries and explain performance in real projects.
"What if we replaced OFFSET with a WHERE clause filtering by an indexed column? How would the time complexity change?"
Practice
OFFSET clause do in an SQL query?Solution
Step 1: Understand OFFSET purpose
The OFFSET clause tells SQL to skip a certain number of rows before starting to return rows.Step 2: Compare with other clauses
LIMIT controls how many rows to return, ORDER BY sorts rows, GROUP BY groups rows. OFFSET specifically skips rows.Final Answer:
It skips a specified number of rows before returning the result set. -> Option AQuick Check:
OFFSET = skip rows [OK]
- Confusing OFFSET with LIMIT
- Thinking OFFSET sorts rows
- Assuming OFFSET groups rows
Solution
Step 1: Recall OFFSET syntax
The correct syntax is to write OFFSET followed by the number of rows to skip, e.g., OFFSET 10.Step 2: Check each option
SELECT * FROM table OFFSET 10; uses correct syntax. SELECT * FROM table SKIP 10; uses SKIP which is invalid. SELECT * FROM table LIMIT 10 OFFSET; misplaces OFFSET. SELECT * FROM table OFFSET; lacks a number.Final Answer:
SELECT * FROM table OFFSET 10; -> Option DQuick Check:
OFFSET number correct syntax [OK]
- Using SKIP instead of OFFSET
- Omitting the number after OFFSET
- Placing OFFSET before FROM
Employees with columns id and name, what will this query return?SELECT id, name FROM Employees ORDER BY id ASC LIMIT 3 OFFSET 2;
Solution
Step 1: Understand OFFSET and LIMIT effect
OFFSET 2 skips the first 2 rows. LIMIT 3 returns the next 3 rows after skipping.Step 2: Apply ORDER BY
Rows are ordered by id ascending, so rows with id 3, 4, and 5 are returned.Final Answer:
Rows 3, 4, and 5 ordered by id ascending. -> Option CQuick Check:
OFFSET 2 skips first 2, LIMIT 3 returns next 3 [OK]
- Ignoring OFFSET and returning first rows
- Confusing OFFSET number with LIMIT
- Not applying ORDER BY before OFFSET
SELECT * FROM Products LIMIT 5 OFFSET;
Solution
Step 1: Check OFFSET syntax
OFFSET must be followed by a number indicating how many rows to skip.Step 2: Analyze the query
The query ends with OFFSET but no number is given, causing a syntax error.Final Answer:
OFFSET requires a number after it. -> Option BQuick Check:
OFFSET needs number [OK]
- Leaving OFFSET without a number
- Thinking OFFSET must come before LIMIT
- Believing SELECT * disallows OFFSET
created_at descending. Which query correctly uses OFFSET and LIMIT?Solution
Step 1: Calculate OFFSET for page 4
Each page has 20 items, so page 4 starts after 3 pages: 3 * 20 = 60 rows skipped.Step 2: Check LIMIT and OFFSET usage
LIMIT 20 returns 20 rows, OFFSET 60 skips first 60 rows, so page 4 shows rows 61-80.Step 3: Verify ORDER BY
ORDER BY created_at DESC ensures newest products first, consistent paging.Final Answer:
SELECT * FROM Products ORDER BY created_at DESC LIMIT 20 OFFSET 60; -> Option AQuick Check:
Page 4 offset = 60, limit = 20 [OK]
- Calculating OFFSET as page*page_size
- Swapping LIMIT and OFFSET values
- Omitting ORDER BY for consistent paging
Ready to prove it?
Pass the test and this pattern moves unknown
