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.tspackages/teamcode/src/message/message.sql.tspackages/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