Ответ
LIMIT
— это SQL-оператор, который ограничивает количество строк, возвращаемых запросом. Это один из ключевых инструментов для реализации пагинации (постраничного вывода данных).
Использование для пагинации
Для пагинации LIMIT
почти всегда используется в паре с оператором OFFSET
, который указывает, сколько строк нужно пропустить от начала выборки.
LIMIT N
: Вернуть первыеN
строк.LIMIT N OFFSET M
: ПропуститьM
строк и вернуть следующиеN
строк.
Например, чтобы показать 20 записей на 3-й странице:
OFFSET
= (3 - 1) * 20 = 40
LIMIT
= 20
SELECT * FROM products ORDER BY created_at DESC LIMIT 20 OFFSET 40;
Пример на Go (GORM)
В Go ORM, таких как GORM, для этого есть удобные методы .Limit()
и .Offset()
.
package main
import (
"gorm.io/gorm"
)
type User struct {
ID uint
Name string
}
func GetUsersPage(db *gorm.DB, page, pageSize int) ([]User, error) {
var users []User
offset := (page - 1) * pageSize
// SELECT * FROM users LIMIT pageSize OFFSET offset;
result := db.Limit(pageSize).Offset(offset).Find(&users)
return users, result.Error
}
Важные замечания
- Производительность: На больших таблицах использование
OFFSET
с большим значением может быть неэффективным, так как база данных все равно считывает, а затем отбрасывает все пропущенные строки. Для высоконагруженных систем предпочитают keyset/cursor-based pagination. - Синтаксис: Синтаксис может отличаться в разных СУБД:
- PostgreSQL/MySQL/SQLite:
LIMIT ... OFFSET ...
- MS SQL Server:
OFFSET ... ROWS FETCH NEXT ... ROWS ONLY
- Oracle:
OFFSET ... ROWS FETCH NEXT ... ROWS ONLY
(с версии 12c) илиROWNUM
в старых версиях.
- PostgreSQL/MySQL/SQLite: