diff --git a/src/Umbraco.Core/Migrations/Upgrade/V_8_8_0/UpgradedIncludeIndexes.cs b/src/Umbraco.Core/Migrations/Upgrade/V_8_8_0/UpgradedIncludeIndexes.cs index fb9e6e7f23..50c0a48c91 100644 --- a/src/Umbraco.Core/Migrations/Upgrade/V_8_8_0/UpgradedIncludeIndexes.cs +++ b/src/Umbraco.Core/Migrations/Upgrade/V_8_8_0/UpgradedIncludeIndexes.cs @@ -2,8 +2,6 @@ using Umbraco.Core.Migrations.Expressions.Execute.Expressions; using Umbraco.Core.Persistence.DatabaseModelDefinitions; using Umbraco.Core.Persistence.Dtos; -using Umbraco.Core.Persistence.SqlSyntax; -using Umbraco.Core.PropertyEditors; namespace Umbraco.Core.Migrations.Upgrade.V_8_8_0 { @@ -16,20 +14,13 @@ namespace Umbraco.Core.Migrations.Upgrade.V_8_8_0 } public override void Migrate() - { - // Rebuild keys and indexes for these tables, unfortunately we cannot use the Delete.KeysAndIndexes - // procedure since for some reason that tries to drop the PK and we don't want that and it would be a breaking - // change to add another parameter to that method so we'll just manually do it. - - var nodeDtoObjectTypeIndex = $"IX_{NodeDto.TableName}_ObjectType"; // this is the one we'll rebuild - // delete existing ones - DeleteIndexes($"IX_{NodeDto.TableName}_ParentId", $"IX_{NodeDto.TableName}_Trashed", nodeDtoObjectTypeIndex); - CreateIndexes(nodeDtoObjectTypeIndex); + { + var nodeDtoLevelIndex = $"IX_{NodeDto.TableName}_Level"; + CreateIndexes(nodeDtoLevelIndex); // add the new definition var contentVersionNodeIdIndex = $"IX_{ContentVersionDto.TableName}_NodeId"; - // delete existing ones - DeleteIndexes(contentVersionNodeIdIndex); - CreateIndexes(contentVersionNodeIdIndex); + DeleteIndexes(contentVersionNodeIdIndex); // delete existing ones + CreateIndexes(contentVersionNodeIdIndex); // add the updated definition } private void DeleteIndexes(params string[] toDelete) diff --git a/src/Umbraco.Core/Persistence/Dtos/NodeDto.cs b/src/Umbraco.Core/Persistence/Dtos/NodeDto.cs index 3fd9a9f1d4..6797cd2c98 100644 --- a/src/Umbraco.Core/Persistence/Dtos/NodeDto.cs +++ b/src/Umbraco.Core/Persistence/Dtos/NodeDto.cs @@ -26,9 +26,12 @@ namespace Umbraco.Core.Persistence.Dtos [Column("parentId")] [ForeignKey(typeof(NodeDto))] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_ParentId")] public int ParentId { get; set; } + // NOTE: This index is primarily for the nucache data lookup, see https://github.com/umbraco/Umbraco-CMS/pull/8365#issuecomment-673404177 [Column("level")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_Level", ForColumns = "level,parentId,sortOrder,nodeObjectType,trashed", IncludeColumns = "nodeUser,path,uniqueId,createDate")] public short Level { get; set; } [Column("path")] @@ -41,6 +44,7 @@ namespace Umbraco.Core.Persistence.Dtos [Column("trashed")] [Constraint(Default = "0")] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_Trashed")] public bool Trashed { get; set; } [Column("nodeUser")] // TODO: db rename to 'createUserId' @@ -53,8 +57,8 @@ namespace Umbraco.Core.Persistence.Dtos public string Text { get; set; } [Column("nodeObjectType")] // TODO: db rename to 'objectType' - [NullSetting(NullSetting = NullSettings.Null)] - [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_ObjectType", ForColumns = "level,parentId,sortOrder,nodeObjectType,trashed", IncludeColumns = "nodeUser,path,uniqueId,createDate")] + [NullSetting(NullSetting = NullSettings.Null)] + [Index(IndexTypes.NonClustered, Name = "IX_" + TableName + "_ObjectType")] public Guid? NodeObjectType { get; set; } [Column("createDate")] diff --git a/src/Umbraco.Web/PublishedCache/NuCache/NuCacheComposer.cs b/src/Umbraco.Web/PublishedCache/NuCache/NuCacheComposer.cs index 1ee6b96eb1..c098b516a0 100644 --- a/src/Umbraco.Web/PublishedCache/NuCache/NuCacheComposer.cs +++ b/src/Umbraco.Web/PublishedCache/NuCache/NuCacheComposer.cs @@ -16,6 +16,8 @@ namespace Umbraco.Web.PublishedCache.NuCache var serializer = ConfigurationManager.AppSettings["Umbraco.Web.PublishedCache.NuCache.Serializer"]; composition.Register(); composition.Register(); + + // TODO: Based on our findings it seems like this should not be configurable, we should just be using this because it's better if (serializer == "MsgPack") { var propertyDictionarySerializer = ConfigurationManager.AppSettings["Umbraco.Web.PublishedCache.NuCache.DictionaryOfPropertiesSerializer"];