From 3780ce042b7edda8d080168745d7a6825a68cdae Mon Sep 17 00:00:00 2001 From: Aaron Kimbrell Date: Tue, 29 Sep 2026 19:38:46 -0500 Subject: [PATCH] perf(cdclient): index the columns the lazy lookups search by The converted CDClient had no indexes, so each lazy lookup scanned its table (ComponentsRegistry: about 51000 rows, 3.5 ms a query; 0.09 ms with the index). Loading a player with a large inventory spent up to a minute of the world's main loop in these scans, leaving the client at 35%. Co-Authored-By: Claude Opus 5.5 --- migrations/cdserver/8_lookup_indexes.sql | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 migrations/cdserver/8_lookup_indexes.sql diff --git a/migrations/cdserver/8_lookup_indexes.sql b/migrations/cdserver/8_lookup_indexes.sql new file mode 100644 index 000000000..1a4e0486d --- /dev/null +++ b/migrations/cdserver/8_lookup_indexes.sql @@ -0,0 +1,9 @@ +-- The converted CDClient has no indexes, so every lazy lookup by id scans its whole table (ComponentsRegistry: about +-- 51000 rows, 3.5 ms a query). Loading a player with a big inventory did thousands of them on the world's main loop. +CREATE INDEX IF NOT EXISTS idx_ComponentsRegistry_id ON ComponentsRegistry (id); +CREATE INDEX IF NOT EXISTS idx_ItemComponent_id ON ItemComponent (id); +CREATE INDEX IF NOT EXISTS idx_Objects_id ON Objects (id); +CREATE INDEX IF NOT EXISTS idx_LootMatrix_LootMatrixIndex ON LootMatrix (LootMatrixIndex); +CREATE INDEX IF NOT EXISTS idx_LootTable_LootTableIndex ON LootTable (LootTableIndex); +CREATE INDEX IF NOT EXISTS idx_PlayerFlags_id ON PlayerFlags (id); +CREATE INDEX IF NOT EXISTS idx_Animations_animationGroupID ON Animations (animationGroupID, animation_type);