9 октября 2026 года вышла SQLite 3.54.0: движок реже выполняет лишнюю работу с индексами, а консольная утилита получила встроенную команду для анализа занятого места. Релиз затрагивает SQL-запросы, служебные скрипты и приложения под Windows, где изменились минимальные требования к системе.

Команда .diskused показывает, на что расходуется место в базе SQLite
Когда файл SQLite увеличивается, одного его размера недостаточно, чтобы понять причину. Пространство занимают таблицы и индексы, причём распределение страниц внутри файла может отличаться от ожидаемого. Раньше для подробного анализа использовали отдельную утилиту sqlite3_analyzer. В SQLite 3.54.0 её возможности перенесли в консольную команду .diskused.
В официальной документации показан такой запуск:
sqlite3 demo.db .diskusedКоманда формирует отчёт об использовании пространства таблицами и индексами. В нём есть понятное текстовое описание и SQL-код для создания таблицы space_used, по которой можно проводить более подробный анализ. Это помогает разобраться, какие объекты занимают место в файле базы, без отдельного запуска sqlite3_analyzer.
В основе команды лежит расширение diskused() и виртуальная таблица DBSTAT. Функция уже встроена в официальный консольный клиент SQLite, но отсутствует в стандартном объединённом исходном файле sqlite3.c. Поэтому при использовании diskused() непосредственно в стороннем приложении расширение требуется собирать и подключать отдельно. Для его работы необходима сборка SQLite с SQLITE_ENABLE_DBSTAT_VTAB.
Разработчики объявили sqlite3_analyzer устаревшим: версия 3.54.0 станет последней, в поставку которой входит эта отдельная программа. Для проектов, автоматизирующих анализ размера баз данных, это конкретное изменение привычного инструментария.
Оптимизатор SQLite сокращает лишнюю работу с индексами и UNION
В SQLite 3.54.0 изменилось поведение нескольких типов запросов. Например, при UPDATE таблицы с индексом по выражению движок теперь пропускает обновление этого индекса, если индексируемое значение осталось прежним. Индекс по выражению хранит вычисленный результат — скажем, значение функции от столбца, — чтобы ускорять последующий поиск.
Появились и более узкие оптимизации: улучшена обработка выражений с OR TRUE и OR FALSE, а лишнее DISTINCT в правой части оператора IN больше не мешает оптимизации. Запросы с UNION и LIMIT 1 теперь могут выполняться быстрее и с меньшим расходом памяти. Смысл последнего изменения хорошо виден в сценарии, где от объединения двух выборок нужна всего одна запись: движку приходится выполнять меньше работы ради конечного результата.
В официальном тесте speedtest1, где подсчитывали такты процессора с помощью Valgrind на Linux x64, разработчики получили ускорение примерно на 4% по сравнению с предыдущей версией. Относительно SQLite 3.51.0, выпущенной годом ранее, результат лучше примерно на 7,5%. Эти цифры относятся к конкретному набору испытаний; скорость реального приложения зависит от запросов, оборудования, компилятора и параметров сборки.
Работа с датами стала удобнее для календарных запросов
В функциях обработки даты и времени SQLite появилась форма модификатора weekday -N. Она позволяет найти ближайший предыдущий день недели с заданным номером. Раньше модификатор weekday N искал указанную дату в направлении вперёд. Нумерация начинается с воскресенья (0), а пятница обозначается числом 5.
В SQLite 3.54.0 запрос:
SELECT date('2026-01-01', 'end of year', 'weekday -5');возвращает 2026-12-25 — последнюю пятницу 2026 года. Если исходная дата уже соответствует выбранному дню недели, дата остаётся прежней.
Другой новый модификатор, end of, переводит значение к концу дня, месяца или года. Например:
SELECT date('now', 'end of month');Результат — последний календарный день текущего месяца. Внутренне модификатор переходит к последней миллисекунде соответствующего периода; функция date() показывает только календарную дату. Такие операции встречаются при формировании отчётов за месяц и вычислении границ периодов.
Консольный sqlite3 меняет вывод запросов и работу скриптов
В командном клиенте sqlite3 теперь по умолчанию выводятся заголовки столбцов в табличных режимах даже тогда, когда SQL-запрос не вернул ни одной строки. Раньше пустая выборка могла оставлять экран без названий колонок, из-за чего было сложнее понять структуру результата.
Опция .mode --rowcount on добавляет к результату число полученных строк, а --ifmt и --fpfmt позволяют точнее задавать отображение целых и вещественных чисел. Появились и дополнительные возможности оформления приглашения командной строки: оно поддерживает подстановки состояния и переменные окружения SQLITE_PS1 и SQLITE_PS2.
Есть изменение, которое может затронуть старые сценарии автоматизации. Консоль больше не воспринимает отдельные строки go и / как завершение SQL-команды. Прежнее поведение доступно только при сборке с параметром SQLITE_SHELL_LEGACY_COMMAND_TERMINATOR. Скрипты, использующие такие разделители по аналогии с SQL Server или Oracle, столкнутся с изменением интерпретации ввода.
SQLite 3.54.0 прекращает поддержку Windows XP и Windows CE
Начиная с этого релиза SQLite для Windows требует как минимум Windows Vista. Поддержка Windows XP, более ранних настольных выпусков и Windows CE прекращена. Причина связана с изменением внутреннего механизма синхронизации потоков: вместо CriticalSection для нерекурсивных мьютексов используются Slim Reader/Writer Locks (SRWL), которые появились в Windows Vista.
Это ограничение относится к сборкам SQLite под Windows. В официальных примечаниях отдельно указано, что Linux, macOS, BSD и другие Unix-подобные системы данным изменением не затронуты. Для приложений UWP и WebUI разработчики предусмотрели параметр компиляции SQLITE_UWP=1.
Новые ограничения для схем и триггеров дополняют изменения движка
Программный интерфейс sqlite3_limit() расширили категориями SQLITE_LIMIT_SCHEMA и SQLITE_LIMIT_TRIGGER_STEPS. Первая позволяет ограничивать количество объектов схемы — таблиц, индексов, представлений и триггеров. Вторая определяет максимально допустимое количество SQL-операторов внутри одного триггера. Оба ограничения относятся к параметрам, которые приложение может понижать во время работы.
Изменилось и поведение механизма авторизации: проверочный callback теперь вызывается для SQL-функций внутри выражений DEFAULT при создании таблицы и при фактическом применении значения по умолчанию. Это уточняет точки, в которых приложение может контролировать выполнение функций SQL.
Релиз затрагивает сразу несколько сценариев использования SQLite
SQLite 3.54.0 меняет поведение как самого движка, так и инструментов вокруг него. Анализ пространства переходит в обычную консоль, часть SQL-запросов выполняет меньше операций, а календарные функции получают новые способы работы с датами. Одновременно меняются правила обработки старых консольных команд и нижняя граница совместимости с Windows.
Официальные измерения производительности проведены на тестовом наборе speedtest1. Насколько заметными окажутся оптимизации при работе с конкретной базой данных, определяется её индексами, запросами и нагрузкой. Для небольших встроенных приложений и сложных проектов эффект обновления будет различаться.