Skip to content

Commit 931bc26

Browse files
authored
Finish OP-154
OP-154: Database optimization: tables partitioning and index creation
2 parents 00631ad + 4d7551f commit 931bc26

5 files changed

Lines changed: 206 additions & 9 deletions

File tree

20.1 KB
Binary file not shown.
20.1 KB
Binary file not shown.
20.2 KB
Binary file not shown.
20.2 KB
Binary file not shown.

Migration script/openIMIS migration v1.4.0 - v1.4.1.sql

Lines changed: 206 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
--- MIGRATION Script from v1.4.0 to v1.4.1
22

3-
-- Fixing uspConsumeEnrollments stored procedure
3+
-- OP-140 : Fixing uspConsumeEnrollments stored procedure
44

5-
/****** Object: StoredProcedure [dbo].[uspConsumeEnrollments] ******/
65
SET ANSI_NULLS ON
76
GO
87
SET QUOTED_IDENTIFIER ON
@@ -890,12 +889,8 @@ ALTER PROCEDURE [dbo].[uspConsumeEnrollments](
890889

891890
SELECT @PolicyImported = ISNULL(COUNT(1),0) FROM @tblPolicy WHERE isOffline = 1
892891

893-
894-
895892

896-
897-
898-
IF EXISTS(SELECT COUNT(1)
893+
IF EXISTS(SELECT COUNT(1)
899894
FROM tblInsuree
900895
WHERE ValidityTo IS NULL
901896
AND IsHead = 1
@@ -963,10 +958,9 @@ ALTER PROCEDURE [dbo].[uspConsumeEnrollments](
963958
GO
964959

965960

966-
-- Fixing uspSSRSCapitationPayment stored procedure
967961

962+
-- OP-141: Fixing uspSSRSCapitationPayment stored procedure
968963

969-
/****** Object: StoredProcedure [dbo].[uspSSRSCapitationPayment] ******/
970964
SET ANSI_NULLS ON
971965
GO
972966
SET QUOTED_IDENTIFIER ON
@@ -1317,3 +1311,206 @@ DECLARE @Level1 CHAR(1) = NULL,
13171311

13181312
GROUP BY HFCode
13191313
END
1314+
1315+
1316+
-- OP-154: database partitioning
1317+
1318+
-- Adds four new filegroups to the database
1319+
BEGIN TRY
1320+
BEGIN TRANSACTION;
1321+
1322+
-- if the DATETIME provided in before 1970 then it goes to partition 1 else it goes to partition 2
1323+
CREATE PARTITION FUNCTION [StillValid] (DATETIME) AS RANGE LEFT
1324+
FOR
1325+
VALUES (
1326+
N'1970-01-01T00:00:00.001'
1327+
)
1328+
1329+
-- Create partition Scheme that will define the partition to be used, both use the PRIMARY file group (not IDEAL but done to limit changes in a crisis mode)
1330+
CREATE PARTITION SCHEME [liveArchive] AS PARTITION [StillValid] TO (
1331+
[PRIMARY]
1332+
,[PRIMARY]
1333+
)
1334+
1335+
ALTER TABLE tblClaimItems DROP CONSTRAINT [FK_tblClaimItems_tblClaim-ClaimID]
1336+
ALTER TABLE tblClaimServices DROP CONSTRAINT [FK_tblClaimServices_tblClaim-ClaimID]
1337+
ALTER TABLE tblFeedback DROP CONSTRAINT [FK_tblFeedback_tblClaim-ClaimID]
1338+
1339+
-- Modular
1340+
IF OBJECT_ID('claim_ClaimAttachment') IS NOT NULL
1341+
BEGIN
1342+
ALTER TABLE claim_ClaimAttachment DROP CONSTRAINT claim_ClaimAttachment_claim_id_6d421217_fk_tblClaim_ClaimID
1343+
END
1344+
1345+
IF OBJECT_ID('claim_ClaimMutation') IS NOT NULL
1346+
BEGIN
1347+
ALTER TABLE claim_ClaimMutation DROP CONSTRAINT claim_ClaimMutation_claim_id_22e307c0_fk_tblClaim_ClaimID
1348+
END
1349+
1350+
ALTER TABLE [tblClaim] DROP CONSTRAINT [PK_tblClaim]
1351+
CREATE UNIQUE CLUSTERED INDEX CI_tblClaimValid ON tblClaim (ClaimID,ValidityTo)
1352+
WITH
1353+
( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
1354+
IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON
1355+
) ON liveArchive(ValidityTo)
1356+
1357+
ALTER TABLE tblClaim ADD CONSTRAINT PK_tblClaim PRIMARY KEY NONCLUSTERED (ClaimID) ON [PRIMARY];
1358+
CREATE INDEX NCI_tblClaim_DateClaimed ON [tblClaim](DateClaimed);
1359+
ALTER TABLE [tblClaimItems] ADD CONSTRAINT [FK_tblClaimItems_tblClaim-ClaimID] FOREIGN KEY(ClaimID) REFERENCES [tblClaim] (ClaimID)
1360+
ALTER TABLE [tblClaimServices] ADD CONSTRAINT [FK_tblClaimServices_tblClaim-ClaimID] FOREIGN KEY(ClaimID) REFERENCES [tblClaim] (ClaimID)
1361+
ALTER TABLE [tblFeedback] ADD CONSTRAINT [FK_tblFeedback_tblClaim-ClaimID] FOREIGN KEY(ClaimID) REFERENCES [tblClaim] (ClaimID)
1362+
1363+
IF OBJECT_ID('claim_ClaimAttachment') IS NOT NULL
1364+
BEGIN
1365+
ALTER TABLE [claim_ClaimAttachment] ADD CONSTRAINT claim_ClaimAttachment_claim_id_6d421217_fk_tblClaim_ClaimID FOREIGN KEY(claim_id) REFERENCES [tblClaim] (ClaimID)
1366+
END
1367+
1368+
IF OBJECT_ID('claim_ClaimMutation') IS NOT NULL
1369+
BEGIN
1370+
ALTER TABLE claim_ClaimMutation ADD CONSTRAINT claim_ClaimMutation_claim_id_22e307c0_fk_tblClaim_ClaimID FOREIGN KEY(claim_id) REFERENCES [tblClaim] (ClaimID)
1371+
END
1372+
1373+
ALTER TABLE [tblClaimItems] DROP CONSTRAINT [PK_tblClaimItems]
1374+
CREATE UNIQUE CLUSTERED INDEX CI_tblClaimItemsValid ON tblClaimItems (ClaimItemID,ValidityTo)
1375+
WITH
1376+
( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
1377+
IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON
1378+
) ON liveArchive(ValidityTo)
1379+
ALTER TABLE tblClaimItems ADD CONSTRAINT PK_tblClaimItems PRIMARY KEY NONCLUSTERED (ClaimItemID) ON [PRIMARY];
1380+
1381+
ALTER TABLE [tblClaimServices] DROP CONSTRAINT [PK_tblClaimServices]
1382+
1383+
CREATE UNIQUE CLUSTERED INDEX CI_tblClaimServicesValid ON tblClaimServices (ClaimServiceID,ValidityTo)
1384+
WITH
1385+
( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
1386+
IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON
1387+
) ON liveArchive(ValidityTo)
1388+
ALTER TABLE tblClaimServices ADD CONSTRAINT PK_tblClaimServices PRIMARY KEY NONCLUSTERED (ClaimServiceID) ON [PRIMARY];
1389+
1390+
ALTER TABLE tblInsuree DROP CONSTRAINT [FK_tblInsuree_tblFamilies1-FamilyID]
1391+
ALTER TABLE tblPolicy DROP CONSTRAINT [FK_tblPolicy_tblFamilies-FamilyID]
1392+
1393+
ALTER TABLE [tblFamilies] DROP CONSTRAINT [PK_tblFamilies]
1394+
CREATE UNIQUE CLUSTERED INDEX CI_tblFamiliesValid ON tblFamilies (FamilyID,ValidityTo)
1395+
WITH
1396+
( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
1397+
IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON
1398+
) ON liveArchive(ValidityTo)
1399+
ALTER TABLE tblFamilies ADD CONSTRAINT PK_tblFamilies PRIMARY KEY NONCLUSTERED (FamilyID) ON [PRIMARY];
1400+
1401+
ALTER TABLE [tblInsuree] ADD CONSTRAINT [FK_tblInsuree_tblFamilies1-FamilyID] FOREIGN KEY(FamilyID) REFERENCES [tblFamilies] (FamilyID)
1402+
ALTER TABLE [tblPolicy] ADD CONSTRAINT [FK_tblPolicy_tblFamilies-FamilyID] FOREIGN KEY(FamilyID) REFERENCES [tblFamilies] (FamilyID)
1403+
1404+
ALTER TABLE tblClaim DROP CONSTRAINT [FK_tblClaim_tblInsuree-InsureeID]
1405+
ALTER TABLE tblClaimDedRem DROP CONSTRAINT FK_tblClaimDedRem_tblInsuree
1406+
ALTER TABLE tblFamilies DROP CONSTRAINT FK_tblFamilies_tblInsuree
1407+
ALTER TABLE tblHealthStatus DROP CONSTRAINT FK_tblHealthStatus_tblInsuree
1408+
ALTER TABLE tblInsureePolicy DROP CONSTRAINT FK_tblInsureePolicy_tblInsuree
1409+
ALTER TABLE tblPolicyRenewalDetails DROP CONSTRAINT FK_tblPolicyRenewalDetails_tblInsuree
1410+
ALTER TABLE tblPolicyRenewals DROP CONSTRAINT FK_tblPolicyRenewals_tblInsuree
1411+
1412+
ALTER TABLE [tblInsuree] DROP CONSTRAINT [PK_tblInsuree]
1413+
CREATE UNIQUE CLUSTERED INDEX CI_tblInsureeValid ON tblInsuree (InsureeID,ValidityTo)
1414+
WITH
1415+
( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
1416+
IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON
1417+
) ON liveArchive(ValidityTo)
1418+
ALTER TABLE tblInsuree ADD CONSTRAINT PK_tblInsuree PRIMARY KEY NONCLUSTERED (InsureeID) ON [PRIMARY];
1419+
1420+
ALTER TABLE [tblClaim] ADD CONSTRAINT [FK_tblClaim_tblInsuree-InsureeID] FOREIGN KEY(InsureeID) REFERENCES [tblInsuree] (InsureeID)
1421+
ALTER TABLE [tblClaimDedRem] ADD CONSTRAINT [FK_tblClaimDedRem_tblInsuree-InsureeID] FOREIGN KEY(InsureeID) REFERENCES [tblInsuree] (InsureeID)
1422+
ALTER TABLE [tblFamilies] ADD CONSTRAINT [FK_tblFamilies_tblInsuree-InsureeID] FOREIGN KEY(InsureeID) REFERENCES [tblInsuree] (InsureeID)
1423+
ALTER TABLE [tblHealthStatus] ADD CONSTRAINT [FK_tblHealthStatus_tblInsuree-InsureeID] FOREIGN KEY(InsureeID) REFERENCES [tblInsuree] (InsureeID)
1424+
ALTER TABLE [tblInsureePolicy] ADD CONSTRAINT [FK_tblInsureePolicy_tblInsuree-InsureeID] FOREIGN KEY(InsureeID) REFERENCES [tblInsuree] (InsureeID)
1425+
ALTER TABLE [tblPolicyRenewalDetails] ADD CONSTRAINT [FK_tblPolicyRenewalDetails_tblInsuree-InsureeID] FOREIGN KEY(InsureeID) REFERENCES [tblInsuree] (InsureeID)
1426+
ALTER TABLE [tblPolicyRenewals] ADD CONSTRAINT [FK_tblPolicyRenewals_tblInsuree-InsureeID] FOREIGN KEY(InsureeID) REFERENCES [tblInsuree] (InsureeID)
1427+
1428+
ALTER TABLE tblHFCatchment DROP CONSTRAINT [FK_tblHFCatchment_tblLocations]
1429+
ALTER TABLE tblProduct DROP CONSTRAINT [FK_tblProduct_tblLocation]
1430+
ALTER TABLE tblUsersDistricts DROP CONSTRAINT [FK_tblUsersDistricts_tblLocations]
1431+
ALTER TABLE tblPayer DROP CONSTRAINT FK_tblPayer_tblLocations
1432+
ALTER TABLE tblPLServices DROP CONSTRAINT FK_tblPLServices_tblLocations
1433+
ALTER TABLE tblOfficerVillages DROP CONSTRAINT FK_tblOfficerVillages_tblLocations
1434+
ALTER TABLE tblPLItems DROP CONSTRAINT FK_tblPLItems_tblLocations
1435+
ALTER TABLE tblOfficer DROP CONSTRAINT FK_tblOfficer_tblLocations
1436+
ALTER TABLE tblHF DROP CONSTRAINT FK_tblHF_tblLocations
1437+
ALTER TABLE tblBatchRun DROP CONSTRAINT FK_tblBatchRun_tblLocations
1438+
ALTER TABLE tblFamilies DROP CONSTRAINT FK_tblFamilies_tblLocations
1439+
1440+
ALTER TABLE [tblLocations] DROP CONSTRAINT [PK_tblLocations]
1441+
CREATE UNIQUE CLUSTERED INDEX CI_tblLocations ON tblLocations (LocationId,ValidityTo)
1442+
WITH
1443+
( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
1444+
IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON
1445+
) ON liveArchive(ValidityTo)
1446+
ALTER TABLE [tblLocations] ADD CONSTRAINT PK_tblLocations PRIMARY KEY NONCLUSTERED (LocationId) ON [PRIMARY];
1447+
1448+
ALTER TABLE tblHFCatchment ADD CONSTRAINT [FK_tblHFCatchment_tblLocation] FOREIGN KEY(LocationId) REFERENCES [tblLocations] (LocationId)
1449+
ALTER TABLE tblProduct ADD CONSTRAINT [FK_tblProduct_tblLocations] FOREIGN KEY(LocationId) REFERENCES [tblLocations] (LocationId)
1450+
ALTER TABLE tblUsersDistricts ADD CONSTRAINT [FK_tblUsersDistricts_tblLocations] FOREIGN KEY(LocationId) REFERENCES [tblLocations] (LocationId)
1451+
ALTER TABLE tblPayer ADD CONSTRAINT FK_tblPayer_tblLocations FOREIGN KEY(LocationId) REFERENCES [tblLocations] (LocationId)
1452+
ALTER TABLE tblPLServices WITH NOCHECK ADD CONSTRAINT FK_tblPLServices_tblLocations FOREIGN KEY(LocationId) REFERENCES [tblLocations] (LocationId)
1453+
ALTER TABLE tblOfficerVillages ADD CONSTRAINT FK_tblOfficerVillages_tblLocations FOREIGN KEY(LocationId) REFERENCES [tblLocations] (LocationId)
1454+
ALTER TABLE tblPLItems WITH NOCHECK ADD CONSTRAINT FK_tblPLItems_tblLocations FOREIGN KEY(LocationId) REFERENCES [tblLocations] (LocationId)
1455+
ALTER TABLE tblOfficer ADD CONSTRAINT FK_tblOfficer_tblLocations FOREIGN KEY(LocationId) REFERENCES [tblLocations] (LocationId)
1456+
ALTER TABLE tblHF ADD CONSTRAINT FK_tblHF_tblLocations FOREIGN KEY(LocationId) REFERENCES [tblLocations] (LocationId)
1457+
ALTER TABLE tblBatchRun ADD CONSTRAINT FK_tblBatchRun_tblLocations FOREIGN KEY(LocationID) REFERENCES [tblLocations] (LocationID)
1458+
ALTER TABLE tblFamilies ADD CONSTRAINT FK_tblFamilies_tblLocations FOREIGN KEY(LocationID) REFERENCES [tblLocations] (LocationID)
1459+
1460+
CREATE NONCLUSTERED INDEX NCI_tblUserDistrict_UserID ON tblUsersDistricts (ValidityTo,UserID)
1461+
CREATE NONCLUSTERED INDEX NCI_tblUsers_UserUUID ON tblUsers (ValidityTo,UserUUID)
1462+
CREATE NONCLUSTERED INDEX NCI_tblUserRoles_UserID ON tblUserRoles (ValidityTo,UserID)
1463+
1464+
COMMIT TRANSACTION;
1465+
END TRY
1466+
BEGIN CATCH
1467+
ROLLBACK TRANSACTION;
1468+
END CATCH
1469+
1470+
-- OP-154: add indexed to Location views
1471+
1472+
SET ANSI_NULLS ON
1473+
GO
1474+
1475+
SET QUOTED_IDENTIFIER ON
1476+
GO
1477+
1478+
ALTER VIEW [dbo].[tblWards] WITH SCHEMABINDING AS
1479+
SELECT LocationId WardId, ParentLocationId DistrictId, LocationCode WardCode, LocationName WardName, ValidityFrom, ValidityTo, LegacyId, AuditUserId, RowId
1480+
FROM [dbo].tblLocations
1481+
WHERE ValidityTo IS NULL
1482+
AND LocationType = N'W'
1483+
GO
1484+
1485+
CREATE UNIQUE CLUSTERED INDEX CI_tblWards ON tblWards(WardId)
1486+
GO
1487+
1488+
ALTER VIEW [dbo].[tblVillages] WITH SCHEMABINDING AS
1489+
SELECT LocationId VillageId, ParentLocationId WardId, LocationCode VillageCode, LocationName VillageName,MalePopulation, FemalePopulation, OtherPopulation, Families, ValidityFrom, ValidityTo, LegacyId, AuditUserId, RowId
1490+
FROM [dbo].tblLocations
1491+
WHERE ValidityTo IS NULL
1492+
AND LocationType = N'V'
1493+
GO
1494+
1495+
CREATE UNIQUE CLUSTERED INDEX CI_tblVillages ON tblVillages(VillageId)
1496+
GO
1497+
1498+
ALTER VIEW [dbo].[tblRegions] WITH SCHEMABINDING AS
1499+
SELECT LocationId RegionId, LocationCode RegionCode, LocationName RegionName, ValidityFrom, ValidityTo, LegacyId, AuditUserId, RowId
1500+
FROM [dbo].tblLocations
1501+
WHERE ValidityTo IS NULL
1502+
AND LocationType = N'R'
1503+
GO
1504+
1505+
CREATE UNIQUE CLUSTERED INDEX CI_tblRegions ON tblRegions(RegionId)
1506+
GO
1507+
1508+
ALTER VIEW [dbo].[tblDistricts] WITH SCHEMABINDING
1509+
AS
1510+
SELECT LocationId DistrictId, LocationCode DistrictCode, LocationName DistrictName, ParentLocationId Region, ValidityFrom, ValidityTo, LegacyId, AuditUserId, RowId
1511+
FROM [dbo].tblLocations
1512+
WHERE ValidityTo IS NULL
1513+
AND LocationType = N'D'
1514+
GO
1515+
1516+
CREATE UNIQUE CLUSTERED INDEX CI_tblDistricts ON tblDistricts(DistrictId)

0 commit comments

Comments
 (0)