- Evolucao: Round 14 (Agency Engineering)
- Fonte: agency-agents/engineering/engineering-database-optimizer.md
- Categoria: agency/engineering
- Versao: 1.0.0
Motor de analise e otimizacao de banco de dados. Analisa schemas SQL, consultas e indices para detectar oportunidades de otimizacao, indices faltantes, problemas de normalizacao e anti-padroes de query. Opera offline com stdlib Python 3.12.
- Dado: CREATE TABLE statements com colunas sem indices, tipos subotimos (VARCHAR sem limite, TEXT para campos pequenos)
- Quando:
engine.analyze_schema(ddl_text)e chamado - Entao: retorna
SchemaAnalysiscomtables,missing_indexes,type_warningsescore
- Dado: codigo com loop executando query dentro de iteracao
- Quando:
engine.detect_n_plus_one(source_code)e chamado - Entao: retorna
NPlusOneReportcomoccurrencesesuggestionspara eager loading/batch
- Dado: queries com WHERE/JOIN/ORDER BY em colunas sem indices declarados
- Quando:
engine.suggest_indexes(ddl_text, queries)e chamado - Entao: retorna
IndexSuggestionscomsuggestionsno formatoCREATE INDEX ... ON table(column)
- Dado: queries com
SELECT *,%LIKE%sem indice, funcoes em WHERE, cartesian joins - Quando:
engine.detect_antipatterns(query_text)e chamado - Entao: retorna
AntipatternReportcomantipatternseseveritypara cada um
from dataclasses import dataclass, field
from typing import Optional
@dataclass
class SchemaAnalysis:
tables: list[dict] # [{name, columns, indexes, warnings}]
missing_indexes: list[str] # sugestoes CREATE INDEX
type_warnings: list[dict]
score: int # 0-100
available: bool = True
@dataclass
class NPlusOneReport:
occurrences: list[dict] # [{line, loop_type, query, suggestion}]
count: int
available: bool = True
@dataclass
class IndexSuggestions:
suggestions: list[dict] # [{table, columns, ddl, reason}]
count: int
available: bool = True
@dataclass
class AntipatternReport:
antipatterns: list[dict] # [{line, pattern, severity, fix}]
count: int
available: bool = True
class DatabaseOptimizer:
@property
def available(self) -> bool: ...
def analyze_schema(self, ddl_text: str) -> SchemaAnalysis: ...
def detect_n_plus_one(self, source_code: str) -> NPlusOneReport: ...
def suggest_indexes(self, ddl_text: str, queries: list[str]) -> IndexSuggestions: ...
def detect_antipatterns(self, query_text: str) -> AntipatternReport: ...