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 <noreply@anthropic.com>
This commit is contained in:
Aaron Kimbrell
2026-09-29 19:38:46 -05:00
parent 381800fe5e
commit 3780ce042b

View File

@@ -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);