Разработчики SQLite выпустили новую версию с поддержкой оконных функций и улучшенным оптимизатором запросов.
SQLite — это внутрипроцессная библиотека, которая реализует автономный, бессерверный, транзакционный механизм базы данных SQL. Вся база данных SQL с несколькими таблицами, индексами, триггерами и представлениями содержится в одном файле на диске.
Новая поддержка оконных функций позволяет писать операторы SQL, в которых входные значения берутся из «окна» одной или нескольких строк в наборе результатов оператора SELECT, поэтому вы можете писать такие операторы, как:
ВЫБЕРИТЕ x, y, row_number () НАД win1, rank () НАД win2
ОТ t0
WINDOW win1 AS (ЗАКАЗЫВАЕТСЯ ПО y ДИАПАЗОН МЕЖДУ НЕОГРАНИЧЕННОЙ ПРЕДЫДУЩЕЙ И ТЕКУЩЕЙ СТРОКОЙ),
win2 КАК (РАЗДЕЛЕНИЕ ПО y ПОРЯДОК ПО x)
ЗАКАЗАТЬ ПО x;
Оконные функции отличаются от обычных функций SQL наличием предложения OVER.
В дополнение к поддержке функции Window в этом выпуске есть расширенная команда Alter Table, которая позволяет вам переименовывать столбцы в таблице с помощью ALTER TABLE table RENAME COLUMN oldname TO newname. Функция переименования таблицы была изменена так, что она также обновляет ссылки на переименованную таблицу в триггерах и представлениях.
Оптимизатор запросов — еще один элемент, который был улучшен, особенно при использовании с агрегированными запросами. Оптимизатор больше не загружает столбцы, которые не нужны в агрегатном запросе, когда столбцы не входят в агрегатную функцию и не являются частью предложения GROUP BY.
Другие улучшения оптимизатора запросов улучшают производительность запросов, использующих оператор IN, в которых столбец, используемый для поиска, не является крайним левым столбцом в многоколоночном индексе; и оптимизатор теперь использует транзитивное свойство, чтобы попытаться распространить постоянные значения в предложении WHERE. Например, преобразуйте «a = 99 AND b = a» в «a = 99 AND b = 99».
Другое интересное улучшение — добавление модуля Geopoly. Это альтернативный интерфейс для расширения R-Tree, который использует нотацию GeoJSON для описания двумерных многоугольников. Geopoly включает функции для определения того, когда один многоугольник содержится внутри другого или перекрывается с ним. Его можно использовать для вычисления площади, заключенной в многоугольник, или для выполнения линейных преобразований многоугольников, или для визуализации многоугольников в формате SVG.