From 4e6e215d351f145890d04b9313440b50a23c90a6 Mon Sep 17 00:00:00 2001 From: Kyle Spearrin Date: Wed, 25 Apr 2018 13:55:47 -0400 Subject: [PATCH] update more sprocs to use proper index --- .../Organization_DeleteById.sql | 3 +- .../Organization_UpdateStorage.sql | 3 +- .../2018-04-24_00_CipherQueryTuning.sql | 85 +++++++++++++++++++ 3 files changed, 89 insertions(+), 2 deletions(-) diff --git a/src/Sql/dbo/Stored Procedures/Organization_DeleteById.sql b/src/Sql/dbo/Stored Procedures/Organization_DeleteById.sql index bd5dcc7dbc..c8d3a4f437 100644 --- a/src/Sql/dbo/Stored Procedures/Organization_DeleteById.sql +++ b/src/Sql/dbo/Stored Procedures/Organization_DeleteById.sql @@ -15,7 +15,8 @@ BEGIN FROM [dbo].[Cipher] WHERE - [OrganizationId] = @Id + [UserId] IS NULL + AND [OrganizationId] = @Id SET @BatchSize = @@ROWCOUNT diff --git a/src/Sql/dbo/Stored Procedures/Organization_UpdateStorage.sql b/src/Sql/dbo/Stored Procedures/Organization_UpdateStorage.sql index 7a4b2cf940..f74253b6d8 100644 --- a/src/Sql/dbo/Stored Procedures/Organization_UpdateStorage.sql +++ b/src/Sql/dbo/Stored Procedures/Organization_UpdateStorage.sql @@ -25,7 +25,8 @@ BEGIN LEFT JOIN [CTE] ON C.[Id] = [CTE].[Id] WHERE - C.[OrganizationId] = @Id + C.[UserId] IS NULL + AND C.[OrganizationId] = @Id UPDATE [dbo].[Organization] diff --git a/util/Setup/DbScripts/2018-04-24_00_CipherQueryTuning.sql b/util/Setup/DbScripts/2018-04-24_00_CipherQueryTuning.sql index b6ef78c3d9..fe5aaa7eb3 100644 --- a/util/Setup/DbScripts/2018-04-24_00_CipherQueryTuning.sql +++ b/util/Setup/DbScripts/2018-04-24_00_CipherQueryTuning.sql @@ -222,3 +222,88 @@ BEGIN AND [OrganizationId] = @OrganizationId END GO + +IF OBJECT_ID('[dbo].[Organization_DeleteById]') IS NOT NULL +BEGIN + DROP PROCEDURE [dbo].[Organization_DeleteById] +END +GO + +CREATE PROCEDURE [dbo].[Organization_DeleteById] + @Id UNIQUEIDENTIFIER +AS +BEGIN + SET NOCOUNT ON + + EXEC [dbo].[User_BumpAccountRevisionDateByOrganizationId] @Id + + DECLARE @BatchSize INT = 100 + WHILE @BatchSize > 0 + BEGIN + BEGIN TRANSACTION Organization_DeleteById_Ciphers + + DELETE TOP(@BatchSize) + FROM + [dbo].[Cipher] + WHERE + [UserId] IS NULL + AND [OrganizationId] = @Id + + SET @BatchSize = @@ROWCOUNT + + COMMIT TRANSACTION Organization_DeleteById_Ciphers + END + + DELETE + FROM + [dbo].[Organization] + WHERE + [Id] = @Id +END +GO + +IF OBJECT_ID('[dbo].[Organization_UpdateStorage]') IS NOT NULL +BEGIN + DROP PROCEDURE [dbo].[Organization_UpdateStorage] +END +GO + +CREATE PROCEDURE [dbo].[Organization_UpdateStorage] + @Id UNIQUEIDENTIFIER +AS +BEGIN + SET NOCOUNT ON + + DECLARE @Storage BIGINT + + ;WITH [CTE] AS ( + SELECT + [Id], + ( + SELECT + SUM(CAST(JSON_VALUE(value,'$.Size') AS BIGINT)) + FROM + OPENJSON([Attachments]) + ) [Size] + FROM + [dbo].[Cipher] + ) + SELECT + @Storage = SUM([CTE].[Size]) + FROM + [dbo].[Cipher] C + LEFT JOIN + [CTE] ON C.[Id] = [CTE].[Id] + WHERE + C.[UserId] IS NULL + AND C.[OrganizationId] = @Id + + UPDATE + [dbo].[Organization] + SET + [Storage] = @Storage, + [RevisionDate] = GETUTCDATE() + WHERE + [Id] = @Id +END +GO