← Назад к вопросам

Что такое LIMIT?

2.0 Middle🔥 111 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

LIMIT в SQL

LIMIT — это предложение SQL, которое ограничивает количество строк, возвращаемых запросом. Оно является одним из самых часто используемых инструментов при работе с базами данных, позволяя контролировать объём результатов и оптимизировать производительность.

Базовое использование

Синтаксис LIMIT:

SELECT column1, column2, ...
FROM table_name
LIMIT number;

Примеры:

SELECT * FROM users LIMIT 10;  -- Вернёт первые 10 строк
SELECT name, email FROM customers LIMIT 5;  -- Первые 5 клиентов

LIMIT с OFFSET

OFFSET используется вместе с LIMIT для пропуска определённого количества строк (реализация пагинации):

SELECT * FROM products
LIMIT 10 OFFSET 20;  -- Пропустить 20 строк, вернуть следующие 10

В некоторых системах синтаксис записывается как:

SELECT * FROM orders
LIMIT 10, 20;  -- MySQL синтаксис (20 — offset, 10 — limit)

Использование из Python

С использованием sqlite3:

import sqlite3

conn = sqlite3.connect("database.db")
cursor = conn.cursor()

# Получить первые 5 пользователей
cursor.execute("SELECT id, name FROM users LIMIT 5")
results = cursor.fetchall()
print(results)  # [(1, Alice), (2, Bob), ...]

# Пагинация: 2-я страница по 10 элементов
page = 2
page_size = 10
offset = (page - 1) * page_size
cursor.execute(f"SELECT * FROM products LIMIT {page_size} OFFSET {offset}")
page_results = cursor.fetchall()

С ORM (SQLAlchemy):

from sqlalchemy import create_engine, select
from sqlalchemy.orm import Session

engine = create_engine("sqlite:///database.db")
session = Session(engine)

# LIMIT в SQLAlchemy
users = session.query(User).limit(10).all()

# LIMIT + OFFSET (пагинация)
page_size = 10
page = 2
users = session.query(User).limit(page_size).offset((page - 1) * page_size).all()

# Используя select() синтаксис
stmt = select(User).limit(10).offset(20)
results = session.execute(stmt).scalars().all()

Практические примеры

Получение последних 10 новостей:

cursor.execute("""
    SELECT id, title, published_date
    FROM articles
    ORDER BY published_date DESC
    LIMIT 10
""")
latest_news = cursor.fetchall()

Реализация пагинации:

def get_paginated_results(query, page: int, page_size: int = 20):
    offset = (page - 1) * page_size
    cursor.execute(f"{query} LIMIT {page_size} OFFSET {offset}")
    return cursor.fetchall()

# Использование
page_1_results = get_paginated_results("SELECT * FROM items ORDER BY id", page=1)
page_2_results = get_paginated_results("SELECT * FROM items ORDER BY id", page=2)

Производительность и оптимизация

Почему LIMIT важен:

  • Экономия памяти — не загружаем все миллионы строк в память
  • Скорость сетевой передачи — передаём меньше данных
  • Лучше для пользователей — пагинированный интерфейс
  • Защита от DoS — предотвращаем случайные полные выборки

Оптимизация с индексами:

-- Индекс по дате для быстрого ORDER BY
CREATE INDEX idx_created_at ON users(created_at DESC);

-- Теперь этот запрос выполнится быстро
SELECT * FROM users
ORDER BY created_at DESC
LIMIT 10;

Особенности в разных БД

PostgreSQL, SQLite, MySQL:

SELECT * FROM table LIMIT 10 OFFSET 20;

SQL Server:

SELECT * FROM table
ORDER BY id
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;

Oracle:

SELECT * FROM table
WHERE ROWNUM <= 10;

LIMIT — простой, но мощный инструмент для контроля результатов запросов и оптимизации работы приложений с базами данных.

Что такое LIMIT? | PrepBro