Yandex Metrika
sanches.free

Минимальный MSSQL после MySQL: пагинация, версия и размер базы

Зачем знать T-SQL смежному стеку

Выгрузки от внешних ERP, промежуточные хранилища отчётов и старые кластеры нередко живут рядом с PHP-проектами на классической MySQL. Если обмен упирается в SQL Server без ORM-бриджа из коробки, достаточно короткой шпаргалки синтаксиса, чтобы не ломать план работы производительности и не перетягивать лишнее в память PHP.

Окно строк вместо LIMIT

На современном уровне совместимости чаще пишут OFFSET … ROWS FETCH NEXT … ROWS ONLY после обязательного ORDER BY, иначе сортировка не гарантирована. Если версия ограничена, применим оконный счётчик ROW_NUMBER(); для совсем архаичной среды сохранён приём двойного TOP с переворотом — он хрупок к связкам столбцов и требует проверять план выполнения.

SELECT *
FROM Document AS d
WHERE d.ArchiveLane = 'public'
ORDER BY d.UpdatedAtUtc ASC
OFFSET 12 ROWS FETCH NEXT 24 ROWS ONLY;

WITH ranked AS (
    SELECT *, ROW_NUMBER() OVER (ORDER BY ID) AS row_seq
    FROM Document
)
SELECT *
FROM ranked
WHERE row_seq BETWEEN 10 AND 20;

Диагностика окружения

SELECT @@VERSION; сразу выдаёт продукт, билд и редакцию без отдельной лицензионной утилиты. EXEC sp_spaceused; приближает картину «сколько живёт файл данных» перед настройкой бэкапа или переездом между дисками — параметры можно уточнить по тематическим ключевым аргументам процедуры, если нужен разбор по объектам каталога.

SELECT @@VERSION;
EXEC sp_spaceused;

Мост к задачам ускорения

Страничные выборки отфильтрованных множеств в интеграциях нужно ставить там, где нет возможности локально синхронизировать лёгкий кеш в Redis: меньшие срезы снижают время удержания соединений в веб-воркере и шум блокировок. Держите ключ сортировки согласованным с поддерживающим индексом как и в мире InnoDB.

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии