PlotDirector/PlotLine/Sql/083_FloorPlanEditorOccupancyIndexes.sql
Nick Beckley 350b8ba9ab Implemented the focused Floor Plans performance pass.
Measured findings:
Authenticated Calendar House editor load measured around 600 ms locally.
SQL calls were generally around 50-65 ms after warm-up.
The main recent bloat was the Help UI wiring: the editor had 615 help icons and about 1.5 MB of HTML.
Optimisations made:
Reduced repeated hidden help icons in [Edit.cshtml (line 409)](C:/Source/PlotLine/PlotLine/Views/FloorPlans/Edit.cshtml:409), especially per-block editors and repeated transition edit modals.
Help icons now measure at 107, with HTML reduced to about 1.26 MB.
Optimised occupancy warning calculation in [CoreServices.cs (line 7883)](C:/Source/PlotLine/PlotLine/Services/CoreServices.cs:7883) by grouping occupancy rows once instead of repeatedly scanning them per scene.
Added new index migration [083_FloorPlanEditorOccupancyIndexes.sql](C:/Source/PlotLine/PlotLine/Sql/083_FloorPlanEditorOccupancyIndexes.sql) for Floor Plan scene/occupancy lookups. Applied locally.
Verified:
Structure/Occupancy mode still works.
Previous/Next scene changes the selected scene.
Tokens and transitions still render.
Help icons still resolve to articles.
dotnet build PlotLine.slnx passes with 0 warnings and 0 errors.
No Floor Plans behaviour, transition logic, occupancy data model, or feature architecture changes.
2026-06-22 16:58:20 +01:00

37 lines
1.9 KiB
Transact-SQL

SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Scenes_FloorPlanID' AND object_id = OBJECT_ID(N'dbo.Scenes'))
CREATE INDEX IX_Scenes_FloorPlanID ON dbo.Scenes(FloorPlanID, IsArchived, ChapterID, SceneNumber, SortOrder)
INCLUDE (SceneTitle, InitialFloorPlanFloorID);
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Scenes_InitialFloorPlanFloorID' AND object_id = OBJECT_ID(N'dbo.Scenes'))
CREATE INDEX IX_Scenes_InitialFloorPlanFloorID ON dbo.Scenes(InitialFloorPlanFloorID)
WHERE InitialFloorPlanFloorID IS NOT NULL;
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_SceneFloorPlanOccupancy_FloorPlanID' AND object_id = OBJECT_ID(N'dbo.SceneFloorPlanOccupancy'))
CREATE INDEX IX_SceneFloorPlanOccupancy_FloorPlanID ON dbo.SceneFloorPlanOccupancy(FloorPlanID, SceneID, LocationID)
INCLUDE (FloorPlanFloorID, CharacterID, StoryAssetID);
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_SceneFloorPlanOccupancy_LocationID' AND object_id = OBJECT_ID(N'dbo.SceneFloorPlanOccupancy'))
CREATE INDEX IX_SceneFloorPlanOccupancy_LocationID ON dbo.SceneFloorPlanOccupancy(LocationID)
INCLUDE (SceneID, FloorPlanID, FloorPlanFloorID, CharacterID, StoryAssetID);
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_SceneFloorPlanOccupancy_CharacterID' AND object_id = OBJECT_ID(N'dbo.SceneFloorPlanOccupancy'))
CREATE INDEX IX_SceneFloorPlanOccupancy_CharacterID ON dbo.SceneFloorPlanOccupancy(CharacterID)
INCLUDE (SceneID, FloorPlanID, LocationID)
WHERE CharacterID IS NOT NULL;
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_SceneFloorPlanOccupancy_StoryAssetID' AND object_id = OBJECT_ID(N'dbo.SceneFloorPlanOccupancy'))
CREATE INDEX IX_SceneFloorPlanOccupancy_StoryAssetID ON dbo.SceneFloorPlanOccupancy(StoryAssetID)
INCLUDE (SceneID, FloorPlanID, LocationID)
WHERE StoryAssetID IS NOT NULL;
GO