perf: add database indexes for better query performance
Indexes added: - items.artikel - frequently searched/filtered - items(artikel, groesse) - unique article/size lookup - orders.done - order completion filter - orders.canceled - order cancellation filter - orders(done, canceled) - combined status filter for "open orders" - ausbuchungen.item_id - foreign key for JOINs All indexes use IF NOT EXISTS for idempotent execution. This improves performance for: - Article search/filtering in admin interface - Order status filtering - Stock movement queries Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
21
wawi/app.py
21
wawi/app.py
@@ -160,6 +160,7 @@ def init_db() -> None:
|
||||
ensure_price_column(db)
|
||||
ensure_image_column(db)
|
||||
ensure_orders_columns(db)
|
||||
ensure_indexes(db)
|
||||
ensure_admin_user(db)
|
||||
|
||||
|
||||
@@ -200,6 +201,26 @@ def ensure_orders_columns(db: sqlite3.Connection) -> None:
|
||||
db.commit()
|
||||
|
||||
|
||||
def ensure_indexes(db: sqlite3.Connection) -> None:
|
||||
"""Erstellt Indizes für bessere Query-Performance (idempotent)."""
|
||||
# Index für items.artikel (häufig gesucht/gefiltert)
|
||||
db.execute("CREATE INDEX IF NOT EXISTS idx_items_artikel ON items(artikel)")
|
||||
|
||||
# Index für items(artikel, groesse) für eindeutige Zuordnung
|
||||
db.execute("CREATE INDEX IF NOT EXISTS idx_items_artikel_groesse ON items(artikel, groesse)")
|
||||
|
||||
# Index für orders.done und orders.canceled (Filter "offene Bestellungen")
|
||||
db.execute("CREATE INDEX IF NOT EXISTS idx_orders_done ON orders(done)")
|
||||
db.execute("CREATE INDEX IF NOT EXISTS idx_orders_canceled ON orders(canceled)")
|
||||
db.execute("CREATE INDEX IF NOT EXISTS idx_orders_status ON orders(done, canceled)")
|
||||
|
||||
# Index für ausbuchungen.item_id (Foreign Key, JOINs)
|
||||
db.execute("CREATE INDEX IF NOT EXISTS idx_ausbuchungen_item_id ON ausbuchungen(item_id)")
|
||||
|
||||
db.commit()
|
||||
logger.info("Datenbank-Indizes überprüft/erstellt")
|
||||
|
||||
|
||||
@app.before_request
|
||||
def ensure_db() -> None:
|
||||
"""Stellt sicher, dass DB/Schema einmal pro Worker initialisiert ist."""
|
||||
|
||||
Reference in New Issue
Block a user