Add database migration 5: Indexes for history_archive query performance
- Add composite index on (jail, timeofban DESC) for dashboard filtering - Add composite index on (timeofban DESC, jail, action) for time-range queries - Add single-column indexes on ip and action for targeted filtering - Update schema version to 5 and document in Backend-Development.md Indexes optimize common dashboard and API query patterns with pagination. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -107,7 +107,7 @@ _SCHEMA_STATEMENTS: list[str] = [
|
||||
_CREATE_HISTORY_ARCHIVE,
|
||||
]
|
||||
|
||||
_CURRENT_SCHEMA_VERSION: int = 4
|
||||
_CURRENT_SCHEMA_VERSION: int = 5
|
||||
|
||||
_MIGRATIONS: dict[int, str] = {
|
||||
1: "\n".join(_SCHEMA_STATEMENTS),
|
||||
@@ -143,6 +143,29 @@ CREATE TABLE scheduler_lock (
|
||||
created_at REAL NOT NULL,
|
||||
heartbeat_at REAL NOT NULL
|
||||
);
|
||||
""",
|
||||
5: """
|
||||
-- Migration 5: Add indexes to history_archive table for query performance.
|
||||
-- The history_archive table supports filtering by jail, IP, action, and time range,
|
||||
-- combined with pagination (ORDER BY timeofban DESC LIMIT/OFFSET).
|
||||
-- These indexes accelerate common dashboard and API queries.
|
||||
-- See Docs/Backend-Development.md § Database Performance for details.
|
||||
|
||||
-- Composite index for common queries: jail + timeofban ordering (dashboard filter).
|
||||
CREATE INDEX IF NOT EXISTS idx_history_archive_jail_timeofban
|
||||
ON history_archive (jail, timeofban DESC);
|
||||
|
||||
-- Composite index for time-range + jail queries (history timeline filters).
|
||||
CREATE INDEX IF NOT EXISTS idx_history_archive_timeofban_jail_action
|
||||
ON history_archive (timeofban DESC, jail, action);
|
||||
|
||||
-- Index for single-column filters: supports IP prefix searches and exact matches.
|
||||
CREATE INDEX IF NOT EXISTS idx_history_archive_ip
|
||||
ON history_archive (ip);
|
||||
|
||||
-- Index for action-based queries: supports ban/unban filtering.
|
||||
CREATE INDEX IF NOT EXISTS idx_history_archive_action
|
||||
ON history_archive (action);
|
||||
""",
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user