For LTS-12 we have introduced some new indices in the system database to improve the performance for task and case queries. If you like, you can add them on LTS 10. When migrating to LTS 12, there are no migration problems, because we check if the index already exists:
Postgresql
CREATE INDEX IF NOT EXISTS IWA_CaseLocalized_CaseIdLanguageIdNameIndex ON IWA_CaseLocalized (CaseId, LanguageId, Name varchar_pattern_ops);
CREATE INDEX IF NOT EXISTS IWA_CaseLocalized_LanguageIdNameCaseIdIndex ON IWA_CaseLocalized (LanguageId, Name varchar_pattern_ops, CaseId);
CREATE INDEX IF NOT EXISTS IWA_Task_TaskIdCaseIdIndex ON IWA_Task (TaskId, CaseId);
CREATE INDEX IF NOT EXISTS IWA_Task_CaseIdTaskIdIndex ON IWA_Task (CaseId, TaskId);
CREATE INDEX IF NOT EXISTS IWA_Task_TaskIdBusinessCaseIdIndex ON IWA_Task (TaskId, BusinessCaseId);
CREATE INDEX IF NOT EXISTS IWA_Task_BusinessCaseIdTaskIdIndex ON IWA_Task (BusinessCaseId, TaskId);
CREATE INDEX IF NOT EXISTS IWA_TaskLocalized_TaskIdLanguageIdNameIndex ON IWA_TaskLocalized (TaskId, LanguageId, Name varchar_pattern_ops);
CREATE INDEX IF NOT EXISTS IWA_TaskLocalized_LanguageIdNameTaskIdIndex ON IWA_TaskLocalized (LanguageId, Name varchar_pattern_ops, TaskId);
CREATE INDEX IF NOT EXISTS IWA_TaskCstmStringFld_TaskIdNameValueIndex ON IWA_TaskCustomStringField (TaskId, Name varchar_pattern_ops, "Value" varchar_pattern_ops);
CREATE INDEX IF NOT EXISTS IWA_TaskCstmStringFld_NameValueTaskIdIndex ON IWA_TaskCustomStringField (Name varchar_pattern_ops, "Value" varchar_pattern_ops, TaskId);
CREATE INDEX IF NOT EXISTS IWA_TaskCstmNumberFld_TaskIdNameValueIndex ON IWA_TaskCustomNumberField (TaskId, Name varchar_pattern_ops, "Value");
CREATE INDEX IF NOT EXISTS IWA_TaskCstmNumberFld_NameValueTaskIdIndex ON IWA_TaskCustomNumberField (Name varchar_pattern_ops, "Value", TaskId);
CREATE INDEX IF NOT EXISTS IWA_TaskCstmTimestampFld_TaskIdNameValueIndex ON IWA_TaskCustomTimestampField (TaskId, Name varchar_pattern_ops, "Value");
CREATE INDEX IF NOT EXISTS IWA_TaskCstmTimestampFld_NameValueTaskIdIndex ON IWA_TaskCustomTimestampField (Name varchar_pattern_ops, "Value", TaskId);
CREATE INDEX IF NOT EXISTS IWA_CaseCstmStringFld_CaseIdNameValueIndex ON IWA_CaseCustomStringField (CaseId, Name varchar_pattern_ops, "Value" varchar_pattern_ops);
CREATE INDEX IF NOT EXISTS IWA_CaseCstmStringFld_NameValueCaseIdIndex ON IWA_CaseCustomStringField (Name varchar_pattern_ops, "Value" varchar_pattern_ops, CaseId);
CREATE INDEX IF NOT EXISTS IWA_CaseCstmNumberFld_CaseIdNameValueIndex ON IWA_CaseCustomNumberField (CaseId, Name varchar_pattern_ops, "Value");
CREATE INDEX IF NOT EXISTS IWA_CaseCstmNumberFld_NameValueCaseIdIndex ON IWA_CaseCustomNumberField (Name varchar_pattern_ops, "Value", CaseId);
CREATE INDEX IF NOT EXISTS IWA_CaseCstmTmstmpFld_CaseIdNameValueIndex ON IWA_CaseCustomTimestampField (CaseId, Name varchar_pattern_ops, "Value");
CREATE INDEX IF NOT EXISTS IWA_CaseCstmTmstmpFld_NameValueCaseIdIndex ON IWA_CaseCustomTimestampField (Name varchar_pattern_ops, "Value", CaseId);
CREATE INDEX IF NOT EXISTS IWA_CaseLocalized_CaseIdLanguageIdLowerNameIndex ON IWA_CaseLocalized (CaseId, LanguageId, lower(Name) varchar_pattern_ops);
CREATE INDEX IF NOT EXISTS IWA_CaseLocalized_LanguageIdLowerNameCaseIdIndex ON IWA_CaseLocalized (LanguageId, lower(Name) varchar_pattern_ops, CaseId);
CREATE INDEX IF NOT EXISTS IWA_TaskLocalized_TaskIdLanguageIdLowerNameIndex ON IWA_TaskLocalized (TaskId, LanguageId, lower(Name) varchar_pattern_ops);
CREATE INDEX IF NOT EXISTS IWA_TaskLocalized_LanguageIdLowerNameTaskIdIndex ON IWA_TaskLocalized (LanguageId, lower(Name) varchar_pattern_ops, TaskId);
CREATE INDEX IF NOT EXISTS IWA_TaskCstmStringFld_TaskIdNameLowerValueIndex ON IWA_TaskCustomStringField (TaskId, Name varchar_pattern_ops, lower("Value") varchar_pattern_ops);
CREATE INDEX IF NOT EXISTS IWA_TaskCstmStringFld_NameLowerValueTaskIdIndex ON IWA_TaskCustomStringField (Name varchar_pattern_ops, lower("Value") varchar_pattern_ops, TaskId);
CREATE INDEX IF NOT EXISTS IWA_CaseCstmStringFld_CaseIdNameLowerValueIndex ON IWA_CaseCustomStringField (CaseId, Name varchar_pattern_ops, lower("Value") varchar_pattern_ops);
CREATE INDEX IF NOT EXISTS IWA_CaseCstmStringFld_NameLowerValueCaseIdIndex ON IWA_CaseCustomStringField (Name varchar_pattern_ops, lower("Value") varchar_pattern_ops, CaseId);
Oracle
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_CaseLocalized_CaseIdLanguageIdNameIndex ON IWA_CaseLocalized (CaseId, LanguageId, Name)';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_CaseLocalized_LanguageIdNameCaseIdIndex ON IWA_CaseLocalized (LanguageId, Name, CaseId)';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_Task_TaskIdCaseIdIndex ON IWA_Task (TaskId, CaseId)';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_Task_CaseIdTaskIdIndex ON IWA_Task (CaseId, TaskId)';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_Task_TaskIdBusinessCaseIdIndex ON IWA_Task (TaskId, BusinessCaseId)';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_Task_BusinessCaseIdTaskIdIndex ON IWA_Task (BusinessCaseId, TaskId)';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_TaskLocalized_TaskIdLanguageIdNameIndex ON IWA_TaskLocalized (TaskId, LanguageId, Name)';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_TaskLocalized_LanguageIdNameTaskIdIndex ON IWA_TaskLocalized (LanguageId, Name, TaskId)';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_TaskCstmStringFld_TaskIdNameValueIndex ON IWA_TaskCustomStringField (TaskId, Name, "VALUE")';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_TaskCstmStringFld_NameValueTaskIdIndex ON IWA_TaskCustomStringField (Name, "VALUE", TaskId)';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_TaskCstmNumberFld_TaskIdNameValueIndex ON IWA_TaskCustomNumberField (TaskId, Name, "VALUE")';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_TaskCstmNumberFld_NameValueTaskIdIndex ON IWA_TaskCustomNumberField (Name, "VALUE", TaskId)';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_TaskCstmTimestampFld_TaskIdNameValueIndex ON IWA_TaskCustomTimestampField (TaskId, Name, "VALUE")';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_TaskCstmTimestampFld_NameValueTaskIdIndex ON IWA_TaskCustomTimestampField (Name, "VALUE", TaskId)';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_CaseCstmStringFld_CaseIdNameValueIndex ON IWA_CaseCustomStringField (CaseId, Name, "VALUE")';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_CaseCstmStringFld_NameValueCaseIdIndex ON IWA_CaseCustomStringField (Name, "VALUE", CaseId)';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_CaseCstmNumberFld_CaseIdNameValueIndex ON IWA_CaseCustomNumberField (CaseId, Name, "VALUE")';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_CaseCstmNumberFld_NameValueCaseIdIndex ON IWA_CaseCustomNumberField (Name, "VALUE", CaseId)';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_CaseCstmTmstmpFld_CaseIdNameValueIndex ON IWA_CaseCustomTimestampField (CaseId, Name, "VALUE")';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_CaseCstmTmstmpFld_NameValueCaseIdIndex ON IWA_CaseCustomTimestampField (Name, "VALUE", CaseId)';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_CaseLocalized_CaseIdLanguageIdLowerNameIndex ON IWA_CaseLocalized (CaseId, LanguageId, lower(Name))';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_CaseLocalized_LanguageIdLowerNameCaseIdIndex ON IWA_CaseLocalized (LanguageId, lower(Name), CaseId)';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_TaskLocalized_TaskIdLanguageIdLowerNameIndex ON IWA_TaskLocalized (TaskId, LanguageId, lower(Name))';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_TaskLocalized_LanguageIdLowerNameTaskIdIndex ON IWA_TaskLocalized (LanguageId, lower(Name), TaskId)';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_TaskCstmStringFld_TaskIdNameLowerValueIndex ON IWA_TaskCustomStringField (TaskId, Name, lower("VALUE"))';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_TaskCstmStringFld_NameLowerValueTaskIdIndex ON IWA_TaskCustomStringField (Name, lower("VALUE"), TaskId)';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_CaseCstmStringFld_CaseIdNameLowerValueIndex ON IWA_CaseCustomStringField (CaseId, Name, lower("VALUE"))';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
DECLARE
ALREADY_EXISTS EXCEPTION;
COLUMNS_INDEXED EXCEPTION;
PRAGMA EXCEPTION_INIT(ALREADY_EXISTS, -955);
PRAGMA EXCEPTION_INIT(COLUMNS_INDEXED, -1408);
BEGIN
EXECUTE IMMEDIATE 'CREATE INDEX IWA_CaseCstmStringFld_NameLowerValueCaseIdIndex ON IWA_CaseCustomStringField (Name, lower("VALUE"), CaseId)';
EXCEPTION
WHEN ALREADY_EXISTS OR COLUMNS_INDEXED THEN
NULL;
END;
;
MySQL / MariaDb
CREATE PROCEDURE create_index_if_not_exists(sqlstatement VARCHAR(256))
BEGIN
DECLARE already_exists CONDITION FOR SQLSTATE '23000';
DECLARE columns_indexed CONDITION FOR SQLSTATE '42000';
DECLARE EXIT HANDLER FOR already_exists, columns_indexed
BEGIN
-- ignore exceptions for index already exists or columns already indexed
END;
SET @sqlstmt = sqlstatement;
PREPARE stmt FROM @sqlstmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END;
;
CALL create_index_if_not_exists('CREATE INDEX IWA_CaseLocalized_CaseIdLanguageIdNameIndex ON IWA_CaseLocalized (CaseId, LanguageId, Name)');
CALL create_index_if_not_exists('CREATE INDEX IWA_CaseLocalized_LanguageIdNameCaseIdIndex ON IWA_CaseLocalized (LanguageId, Name, CaseId)');
CALL create_index_if_not_exists('CREATE INDEX IWA_Task_TaskIdCaseIdIndex ON IWA_Task (TaskId, CaseId)');
CALL create_index_if_not_exists('CREATE INDEX IWA_Task_CaseIdTaskIdIndex ON IWA_Task (CaseId, TaskId)');
CALL create_index_if_not_exists('CREATE INDEX IWA_Task_TaskIdBusinessCaseIdIndex ON IWA_Task (TaskId, BusinessCaseId)');
CALL create_index_if_not_exists('CREATE INDEX IWA_Task_BusinessCaseIdTaskIdIndex ON IWA_Task (BusinessCaseId, TaskId)');
CALL create_index_if_not_exists('CREATE INDEX IWA_TaskLocalized_TaskIdLanguageIdNameIndex ON IWA_TaskLocalized (TaskId, LanguageId, Name)');
CALL create_index_if_not_exists('CREATE INDEX IWA_TaskLocalized_LanguageIdNameTaskIdIndex ON IWA_TaskLocalized (LanguageId, Name, TaskId)');
CALL create_index_if_not_exists('CREATE INDEX IWA_TaskCstmStringFld_TaskIdNameValueIndex ON IWA_TaskCustomStringField (TaskId, Name, `Value`(200))');
CALL create_index_if_not_exists('CREATE INDEX IWA_TaskCstmStringFld_NameValueTaskIdIndex ON IWA_TaskCustomStringField (Name, `Value`(200), TaskId)');
CALL create_index_if_not_exists('CREATE INDEX IWA_TaskCstmNumberFld_TaskIdNameValueIndex ON IWA_TaskCustomNumberField (TaskId, Name, `Value`)');
CALL create_index_if_not_exists('CREATE INDEX IWA_TaskCstmNumberFld_NameValueTaskIdIndex ON IWA_TaskCustomNumberField (Name, `Value`, TaskId)');
CALL create_index_if_not_exists('CREATE INDEX IWA_TaskCstmTimestampFld_TaskIdNameValueIndex ON IWA_TaskCustomTimestampField (TaskId, Name, `Value`)');
CALL create_index_if_not_exists('CREATE INDEX IWA_TaskCstmTimestampFld_NameValueTaskIdIndex ON IWA_TaskCustomTimestampField (Name, `Value`, TaskId)');
CALL create_index_if_not_exists('CREATE INDEX IWA_CaseCstmStringFld_CaseIdNameValueIndex ON IWA_CaseCustomStringField (CaseId, Name, `Value`(200))');
CALL create_index_if_not_exists('CREATE INDEX IWA_CaseCstmStringFld_NameValueCaseIdIndex ON IWA_CaseCustomStringField (Name, `Value`(200), CaseId)');
CALL create_index_if_not_exists('CREATE INDEX IWA_CaseCstmNumberFld_CaseIdNameValueIndex ON IWA_CaseCustomNumberField (CaseId, Name, `Value`)');
CALL create_index_if_not_exists('CREATE INDEX IWA_CaseCstmNumberFld_NameValueCaseIdIndex ON IWA_CaseCustomNumberField (Name, `Value`, CaseId)');
CALL create_index_if_not_exists('CREATE INDEX IWA_CaseCstmTmstmpFld_CaseIdNameValueIndex ON IWA_CaseCustomTimestampField (CaseId, Name, `Value`)');
CALL create_index_if_not_exists('CREATE INDEX IWA_CaseCstmTmstmpFld_NameValueCaseIdIndex ON IWA_CaseCustomTimestampField (Name, `Value`, CaseId)');
DROP PROCEDURE create_index_if_not_exists;
MSSQL
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_CaseLocalized') AND name='IWA_CaseLocalized_CaseIdLanguageIdNameIndex')
CREATE INDEX IWA_CaseLocalized_CaseIdLanguageIdNameIndex ON IWA_CaseLocalized (CaseId, LanguageId, Name)
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_CaseLocalized') AND name='IWA_CaseLocalized_LanguageIdNameCaseIdIndex')
CREATE INDEX IWA_CaseLocalized_LanguageIdNameCaseIdIndex ON IWA_CaseLocalized (LanguageId, Name, CaseId)
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_Task') AND name='IWA_Task_TaskIdCaseIdIndex')
CREATE INDEX IWA_Task_TaskIdCaseIdIndex ON IWA_Task (TaskId, CaseId)
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_Task') AND name='IWA_Task_CaseIdTaskIdIndex')
CREATE INDEX IWA_Task_CaseIdTaskIdIndex ON IWA_Task (CaseId, TaskId)
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_Task') AND name='IWA_Task_TaskIdBusinessCaseIdIndex')
CREATE INDEX IWA_Task_TaskIdBusinessCaseIdIndex ON IWA_Task (TaskId, BusinessCaseId)
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_Task') AND name='IWA_Task_BusinessCaseIdTaskIdIndex')
CREATE INDEX IWA_Task_BusinessCaseIdTaskIdIndex ON IWA_Task (BusinessCaseId, TaskId)
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_TaskLocalized') AND name='IWA_TaskLocalized_TaskIdLanguageIdNameIndex')
CREATE INDEX IWA_TaskLocalized_TaskIdLanguageIdNameIndex ON IWA_TaskLocalized (TaskId, LanguageId, Name)
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_TaskLocalized') AND name='IWA_TaskLocalized_LanguageIdNameTaskIdIndex')
CREATE INDEX IWA_TaskLocalized_LanguageIdNameTaskIdIndex ON IWA_TaskLocalized (LanguageId, Name, TaskId)
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_TaskCustomStringField') AND name='IWA_TaskCstmStringFld_TaskIdNameValueIndex')
CREATE INDEX IWA_TaskCstmStringFld_TaskIdNameValueIndex ON IWA_TaskCustomStringField (TaskId, Name, "Value")
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_TaskCustomStringField') AND name='IWA_TaskCstmStringFld_NameValueTaskIdIndex')
CREATE INDEX IWA_TaskCstmStringFld_NameValueTaskIdIndex ON IWA_TaskCustomStringField (Name, "Value", TaskId)
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_TaskCustomNumberField') AND name='IWA_TaskCstmNumberFld_TaskIdNameValueIndex')
CREATE INDEX IWA_TaskCstmNumberFld_TaskIdNameValueIndex ON IWA_TaskCustomNumberField (TaskId, Name, "Value")
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_TaskCustomNumberField') AND name='IWA_TaskCstmNumberFld_NameValueTaskIdIndex')
CREATE INDEX IWA_TaskCstmNumberFld_NameValueTaskIdIndex ON IWA_TaskCustomNumberField (Name, "Value", TaskId)
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_TaskCustomTimestampField') AND name='IWA_TaskCstmTimestampFld_TaskIdNameValueIndex')
CREATE INDEX IWA_TaskCstmTimestampFld_TaskIdNameValueIndex ON IWA_TaskCustomTimestampField (TaskId, Name, "Value")
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_TaskCustomTimestampField') AND name='IWA_TaskCstmTimestampFld_NameValueTaskIdIndex')
CREATE INDEX IWA_TaskCstmTimestampFld_NameValueTaskIdIndex ON IWA_TaskCustomTimestampField (Name, "Value", TaskId)
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_CaseCustomStringField') AND name='IWA_CaseCstmStringFld_CaseIdNameValueIndex')
CREATE INDEX IWA_CaseCstmStringFld_CaseIdNameValueIndex ON IWA_CaseCustomStringField (CaseId, Name, "Value")
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_CaseCustomStringField') AND name='IWA_CaseCstmStringFld_NameValueCaseIdIndex')
CREATE INDEX IWA_CaseCstmStringFld_NameValueCaseIdIndex ON IWA_CaseCustomStringField (Name, "Value", CaseId)
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_CaseCustomNumberField') AND name='IWA_CaseCstmNumberFld_CaseIdNameValueIndex')
CREATE INDEX IWA_CaseCstmNumberFld_CaseIdNameValueIndex ON IWA_CaseCustomNumberField (CaseId, Name, "Value")
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_CaseCustomNumberField') AND name='IWA_CaseCstmNumberFld_NameValueCaseIdIndex')
CREATE INDEX IWA_CaseCstmNumberFld_NameValueCaseIdIndex ON IWA_CaseCustomNumberField (Name, "Value", CaseId)
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_CaseCustomTimestampField') AND name='IWA_CaseCstmTmstmpFld_CaseIdNameValueIndex')
CREATE INDEX IWA_CaseCstmTmstmpFld_CaseIdNameValueIndex ON IWA_CaseCustomTimestampField (CaseId, Name, "Value")
GO
IF NOT EXISTS (SELECT * FROM sysindexes WHERE id=object_id('IWA_CaseCustomTimestampField') AND name='IWA_CaseCstmTmstmpFld_NameValueCaseIdIndex')
CREATE INDEX IWA_CaseCstmTmstmpFld_NameValueCaseIdIndex ON IWA_CaseCustomTimestampField (Name, "Value", CaseId)
GO