更新
This commit is contained in:
@@ -0,0 +1,208 @@
|
||||
-- 安全添加索引脚本(检查后添加,避免重复)
|
||||
-- 使用方法:在MySQL客户端或phpMyAdmin中执行
|
||||
|
||||
-- ============================================
|
||||
-- 1. 检查现有索引
|
||||
-- ============================================
|
||||
SELECT
|
||||
TABLE_NAME,
|
||||
INDEX_NAME,
|
||||
GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) as COLUMNS
|
||||
FROM
|
||||
INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE
|
||||
TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME IN (
|
||||
'zyt_appointment',
|
||||
'zyt_tcm_diagnosis',
|
||||
'zyt_admin',
|
||||
'zyt_diagnosis_view_records',
|
||||
'zyt_prescription',
|
||||
'zyt_admin_role'
|
||||
)
|
||||
GROUP BY
|
||||
TABLE_NAME, INDEX_NAME
|
||||
ORDER BY
|
||||
TABLE_NAME, INDEX_NAME;
|
||||
|
||||
-- ============================================
|
||||
-- 2. 安全添加索引(如果不存在)
|
||||
-- ============================================
|
||||
|
||||
-- 预约表索引
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_appointment'
|
||||
AND INDEX_NAME = 'idx_doctor_id') = 0,
|
||||
'ALTER TABLE `zyt_appointment` ADD INDEX `idx_doctor_id` (`doctor_id`)',
|
||||
'SELECT "索引 idx_doctor_id 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_appointment'
|
||||
AND INDEX_NAME = 'idx_patient_id') = 0,
|
||||
'ALTER TABLE `zyt_appointment` ADD INDEX `idx_patient_id` (`patient_id`)',
|
||||
'SELECT "索引 idx_patient_id 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_appointment'
|
||||
AND INDEX_NAME = 'idx_status') = 0,
|
||||
'ALTER TABLE `zyt_appointment` ADD INDEX `idx_status` (`status`)',
|
||||
'SELECT "索引 idx_status 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_appointment'
|
||||
AND INDEX_NAME = 'idx_appointment_date') = 0,
|
||||
'ALTER TABLE `zyt_appointment` ADD INDEX `idx_appointment_date` (`appointment_date`)',
|
||||
'SELECT "索引 idx_appointment_date 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_appointment'
|
||||
AND INDEX_NAME = 'idx_status_date_time') = 0,
|
||||
'ALTER TABLE `zyt_appointment` ADD INDEX `idx_status_date_time` (`status`, `appointment_date`, `appointment_time`)',
|
||||
'SELECT "索引 idx_status_date_time 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_appointment'
|
||||
AND INDEX_NAME = 'idx_doctor_status_date') = 0,
|
||||
'ALTER TABLE `zyt_appointment` ADD INDEX `idx_doctor_status_date` (`doctor_id`, `status`, `appointment_date`)',
|
||||
'SELECT "索引 idx_doctor_status_date 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 诊断表索引
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_tcm_diagnosis'
|
||||
AND INDEX_NAME = 'idx_patient_name') = 0,
|
||||
'ALTER TABLE `zyt_tcm_diagnosis` ADD INDEX `idx_patient_name` (`patient_name`(20))',
|
||||
'SELECT "索引 idx_patient_name 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_tcm_diagnosis'
|
||||
AND INDEX_NAME = 'idx_assistant_id') = 0,
|
||||
'ALTER TABLE `zyt_tcm_diagnosis` ADD INDEX `idx_assistant_id` (`assistant_id`)',
|
||||
'SELECT "索引 idx_assistant_id 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 管理员表索引
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_admin'
|
||||
AND INDEX_NAME = 'idx_name') = 0,
|
||||
'ALTER TABLE `zyt_admin` ADD INDEX `idx_name` (`name`(20))',
|
||||
'SELECT "索引 idx_name 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 诊断查看记录表索引
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_diagnosis_view_records'
|
||||
AND INDEX_NAME = 'idx_diagnosis_confirmed') = 0,
|
||||
'ALTER TABLE `zyt_diagnosis_view_records` ADD INDEX `idx_diagnosis_confirmed` (`diagnosis_id`, `is_confirmed`, `delete_time`)',
|
||||
'SELECT "索引 idx_diagnosis_confirmed 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 处方表索引
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_prescription'
|
||||
AND INDEX_NAME = 'idx_diagnosis_delete') = 0,
|
||||
'ALTER TABLE `zyt_prescription` ADD INDEX `idx_diagnosis_delete` (`diagnosis_id`, `delete_time`)',
|
||||
'SELECT "索引 idx_diagnosis_delete 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- 管理员角色表索引
|
||||
SET @sql = IF(
|
||||
(SELECT COUNT(*) FROM INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME = 'zyt_admin_role'
|
||||
AND INDEX_NAME = 'idx_admin_role') = 0,
|
||||
'ALTER TABLE `zyt_admin_role` ADD INDEX `idx_admin_role` (`admin_id`, `role_id`)',
|
||||
'SELECT "索引 idx_admin_role 已存在" as message'
|
||||
);
|
||||
PREPARE stmt FROM @sql;
|
||||
EXECUTE stmt;
|
||||
DEALLOCATE PREPARE stmt;
|
||||
|
||||
-- ============================================
|
||||
-- 3. 再次检查索引是否创建成功
|
||||
-- ============================================
|
||||
SELECT
|
||||
TABLE_NAME,
|
||||
INDEX_NAME,
|
||||
GROUP_CONCAT(COLUMN_NAME ORDER BY SEQ_IN_INDEX) as COLUMNS,
|
||||
INDEX_TYPE,
|
||||
NON_UNIQUE
|
||||
FROM
|
||||
INFORMATION_SCHEMA.STATISTICS
|
||||
WHERE
|
||||
TABLE_SCHEMA = DATABASE()
|
||||
AND TABLE_NAME IN (
|
||||
'zyt_appointment',
|
||||
'zyt_tcm_diagnosis',
|
||||
'zyt_admin',
|
||||
'zyt_diagnosis_view_records',
|
||||
'zyt_prescription',
|
||||
'zyt_admin_role'
|
||||
)
|
||||
GROUP BY
|
||||
TABLE_NAME, INDEX_NAME, INDEX_TYPE, NON_UNIQUE
|
||||
ORDER BY
|
||||
TABLE_NAME, INDEX_NAME;
|
||||
|
||||
SELECT '索引创建完成!' as message;
|
||||
Reference in New Issue
Block a user