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.
37 lines
1.9 KiB
Transact-SQL
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
|