This commit is contained in:
Your Name
2026-03-23 18:02:16 +08:00
parent 18fee2e8f8
commit 250d173c2f
525 changed files with 10659 additions and 793 deletions
+208
View File
@@ -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;