Descrição
Várias colunas armazenam dados como text({ mode: "json" }) no Drizzle:
| Tabela |
Coluna |
Conteúdo |
message |
data |
InfoData (metadados da mensagem) |
part |
data |
PartData (arquivos, ferramentas, texto) |
session |
summary_diffs |
Snapshot.FileDiff[] |
session |
revert |
{ messageID, partID, snapshot?, diff? } |
session |
permission |
Permission.Ruleset |
session |
model |
{ id, providerID, variant? } |
event |
data |
Record<string, unknown> |
SQLite não permite criar índices sobre campos internos de JSON sem extensões (como json_each() virtual tables). Qualquer filtro que precise acessar propriedades internas força scan completo e parse do JSON em runtime.
Impacto
- Moderado no momento — esses campos são tipicamente lidos após já ter filtrado por
session_id (indexado)
- Mas se houver necessidade futura de queries como "sessões do provider X" ou "mensagens do tipo Y", não haverá índice para ajudar
- Overhead de parse de JSON em cada leitura (embora pequeno)
Solução sugerida
- Curto prazo: Documentar que esses campos não são filtráveis por índice
- Médio prazo: Mover campos críticos para colunas nativas (ex:
model_id, model_provider_id como colunas separadas em vez de JSON blob)
- Longo prazo: Avaliar se SQLite com extensão
json1 + expression indexes atende
Arquivos relacionados
packages/teamcode/src/session/session.sql.ts
packages/teamcode/src/message/message.sql.ts
packages/teamcode/src/sync/event.sql.ts
Descrição
Várias colunas armazenam dados como
text({ mode: "json" })no Drizzle:messagedatapartdatasessionsummary_diffsSnapshot.FileDiff[]sessionrevert{ messageID, partID, snapshot?, diff? }sessionpermissionPermission.Rulesetsessionmodel{ id, providerID, variant? }eventdataRecord<string, unknown>SQLite não permite criar índices sobre campos internos de JSON sem extensões (como
json_each()virtual tables). Qualquer filtro que precise acessar propriedades internas força scan completo e parse do JSON em runtime.Impacto
session_id(indexado)Solução sugerida
model_id,model_provider_idcomo colunas separadas em vez de JSON blob)json1+ expression indexes atendeArquivos relacionados
packages/teamcode/src/session/session.sql.tspackages/teamcode/src/message/message.sql.tspackages/teamcode/src/sync/event.sql.ts