数字督察一体化平台
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

95 lines
4.9 KiB

-- 单位/个人问题库查询索引,MySQL InnoDB。
-- 在目标业务库执行;先核对字段类型、索引长度和剩余磁盘空间。
-- 按完整左前缀识别已有等价索引;LOCK=NONE 不支持时会报错,不自动降级为锁表。
-- 在低峰期逐条执行,建索引会消耗 I/O;无需删除任何现有索引或业务数据。
SET @profile_index_sql = IF(
EXISTS (
SELECT 1 FROM (
SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX SEPARATOR ',') AS columns_in_index,
SUM(SUB_PART IS NOT NULL) AS prefix_parts
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'negative' AND INDEX_TYPE = 'BTREE'
GROUP BY INDEX_NAME
) existing_indexes
WHERE prefix_parts = 0 AND (columns_in_index = 'involveDepartId,crtTime' OR columns_in_index LIKE 'involveDepartId,crtTime,%')
),
'SELECT ''idx_profile_depart_time: existing equivalent index, skipped'' AS result',
'ALTER TABLE `negative` ADD INDEX `idx_profile_depart_time` (`involveDepartId`, `crtTime`), ALGORITHM=INPLACE, LOCK=NONE'
);
PREPARE profile_index_stmt FROM @profile_index_sql;
EXECUTE profile_index_stmt;
DEALLOCATE PREPARE profile_index_stmt;
SET @profile_index_sql = IF(
EXISTS (
SELECT 1 FROM (
SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX SEPARATOR ',') AS columns_in_index,
SUM(SUB_PART IS NOT NULL) AS prefix_parts
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'negative' AND INDEX_TYPE = 'BTREE'
GROUP BY INDEX_NAME
) existing_indexes
WHERE prefix_parts = 0 AND (columns_in_index = 'processing_status,checkStatus,discoveryTime' OR columns_in_index LIKE 'processing_status,checkStatus,discoveryTime,%')
),
'SELECT ''idx_profile_verified_time: existing equivalent index, skipped'' AS result',
'ALTER TABLE `negative` ADD INDEX `idx_profile_verified_time` (`processing_status`, `checkStatus`, `discoveryTime`), ALGORITHM=INPLACE, LOCK=NONE'
);
PREPARE profile_index_stmt FROM @profile_index_sql;
EXECUTE profile_index_stmt;
DEALLOCATE PREPARE profile_index_stmt;
SET @profile_index_sql = IF(
EXISTS (
SELECT 1 FROM (
SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX SEPARATOR ',') AS columns_in_index,
SUM(SUB_PART IS NOT NULL) AS prefix_parts
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'negative_blame' AND INDEX_TYPE = 'BTREE'
GROUP BY INDEX_NAME
) existing_indexes
WHERE prefix_parts = 0 AND (columns_in_index = 'negativeId,type,blameIdCode' OR columns_in_index LIKE 'negativeId,type,blameIdCode,%')
),
'SELECT ''idx_profile_problem_person: existing equivalent index, skipped'' AS result',
'ALTER TABLE `negative_blame` ADD INDEX `idx_profile_problem_person` (`negativeId`, `type`, `blameIdCode`), ALGORITHM=INPLACE, LOCK=NONE'
);
PREPARE profile_index_stmt FROM @profile_index_sql;
EXECUTE profile_index_stmt;
DEALLOCATE PREPARE profile_index_stmt;
SET @profile_index_sql = IF(
EXISTS (
SELECT 1 FROM (
SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX SEPARATOR ',') AS columns_in_index,
SUM(SUB_PART IS NOT NULL) AS prefix_parts
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'negative_blame' AND INDEX_TYPE = 'BTREE'
GROUP BY INDEX_NAME
) existing_indexes
WHERE prefix_parts = 0 AND (columns_in_index = 'blameIdCode,type,negativeId' OR columns_in_index LIKE 'blameIdCode,type,negativeId,%')
),
'SELECT ''idx_profile_person_problem: existing equivalent index, skipped'' AS result',
'ALTER TABLE `negative_blame` ADD INDEX `idx_profile_person_problem` (`blameIdCode`, `type`, `negativeId`), ALGORITHM=INPLACE, LOCK=NONE'
);
PREPARE profile_index_stmt FROM @profile_index_sql;
EXECUTE profile_index_stmt;
DEALLOCATE PREPARE profile_index_stmt;
SET @profile_index_sql = IF(
EXISTS (
SELECT 1 FROM (
SELECT GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX SEPARATOR ',') AS columns_in_index,
SUM(SUB_PART IS NOT NULL) AS prefix_parts
FROM information_schema.STATISTICS
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'sup_police' AND INDEX_TYPE = 'BTREE'
GROUP BY INDEX_NAME
) existing_indexes
WHERE prefix_parts = 0 AND (columns_in_index = 'id_code,del' OR columns_in_index LIKE 'id_code,del,%')
),
'SELECT ''idx_profile_police_identity: existing equivalent index, skipped'' AS result',
'ALTER TABLE `sup_police` ADD INDEX `idx_profile_police_identity` (`id_code`, `del`), ALGORITHM=INPLACE, LOCK=NONE'
);
PREPARE profile_index_stmt FROM @profile_index_sql;
EXECUTE profile_index_stmt;
DEALLOCATE PREPARE profile_index_stmt;