SQLite часто воспринимают как «простую БД для мелочей»: конфиги, локальные кеши, временные данные. Но иногда именно она внезапно показывает фокус, после которого начинаешь смотреть на архитектуру иначе. Один из таких фокусов — виртуальные колонки для JSON с полноценными индексами. И это не экспериментальная фича, а зрелый механизм, который годами был у всех под носом. В чём магия: JSON без боли и миграций Обычно выбор прост:
либо строгая схема и скорость SQL,
либо гибкость JSON и расплата в виде медленных запросов. SQLite неожиданно говорит: а давайте и то, и другое. 📦 данные хранятся как «сырой» JSON
🧩 нужные поля вычисляются на лету
⚡ по ним строятся обычные B-tree индексы При этом ничего не пересоздаётся, не переливается и не пересчитывается заранее. Как это работает под капотом Ключевой элемент — виртуальные сгенерированные колонки. Это не реальные поля в таблице, а вычисляемые выражения, обычно через json_extract. Они: 🧠 считаются при запросе
🪶 не занимают место на диске
🚀 м