Ответ
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: