Files
zyt/optimize_appointment_indexes.sql
T
2026-03-23 18:02:16 +08:00

77 lines
3.3 KiB
SQL

-- 预约表索引优化
-- 用于提升预约列表查询性能
-- 1. 预约表 (zyt_appointment) 索引
-- 主要查询字段:doctor_id, patient_id, status, appointment_date, appointment_time
-- 医生ID索引(医生角色查询自己的预约)
ALTER TABLE `zyt_appointment` ADD INDEX `idx_doctor_id` (`doctor_id`);
-- 患者ID索引(关联查询)
ALTER TABLE `zyt_appointment` ADD INDEX `idx_patient_id` (`patient_id`);
-- 状态索引(状态筛选)
ALTER TABLE `zyt_appointment` ADD INDEX `idx_status` (`status`);
-- 预约日期索引(日期范围查询)
ALTER TABLE `zyt_appointment` ADD INDEX `idx_appointment_date` (`appointment_date`);
-- 组合索引:状态+日期+时间(用于排序和筛选)
ALTER TABLE `zyt_appointment` ADD INDEX `idx_status_date_time` (`status`, `appointment_date`, `appointment_time`);
-- 组合索引:医生+状态+日期(医生角色常用查询)
ALTER TABLE `zyt_appointment` ADD INDEX `idx_doctor_status_date` (`doctor_id`, `status`, `appointment_date`);
-- 2. 诊断表 (zyt_tcm_diagnosis) 索引
-- 主要查询字段:patient_name, assistant_id
-- 患者姓名索引(模糊搜索,使用前缀索引)
ALTER TABLE `zyt_tcm_diagnosis` ADD INDEX `idx_patient_name` (`patient_name`(20));
-- 医助ID索引(医助角色查询)
ALTER TABLE `zyt_tcm_diagnosis` ADD INDEX `idx_assistant_id` (`assistant_id`);
-- 3. 管理员表 (zyt_admin) 索引
-- 主要查询字段:name(医生姓名搜索)
-- 管理员姓名索引(模糊搜索,使用前缀索引)
ALTER TABLE `zyt_admin` ADD INDEX `idx_name` (`name`(20));
-- 4. 诊断查看记录表 (zyt_diagnosis_view_records) 索引
-- 主要查询字段:diagnosis_id, is_confirmed, delete_time
-- 组合索引:诊断ID+确认状态+删除时间(用于确认诊单查询)
ALTER TABLE `zyt_diagnosis_view_records` ADD INDEX `idx_diagnosis_confirmed` (`diagnosis_id`, `is_confirmed`, `delete_time`);
-- 5. 处方表 (zyt_prescription) 索引
-- 主要查询字段:diagnosis_id, delete_time
-- 组合索引:诊断ID+删除时间(用于开方状态查询)
ALTER TABLE `zyt_prescription` ADD INDEX `idx_diagnosis_delete` (`diagnosis_id`, `delete_time`);
-- 6. 管理员角色表 (zyt_admin_role) 索引
-- 主要查询字段:admin_id, role_id
-- 组合索引:管理员ID+角色ID(用于权限判断)
ALTER TABLE `zyt_admin_role` ADD INDEX `idx_admin_role` (`admin_id`, `role_id`);
-- ============================================
-- 查看已创建的索引
-- ============================================
-- SHOW INDEX FROM `zyt_appointment`;
-- SHOW INDEX FROM `zyt_tcm_diagnosis`;
-- SHOW INDEX FROM `zyt_admin`;
-- SHOW INDEX FROM `zyt_diagnosis_view_records`;
-- SHOW INDEX FROM `zyt_prescription`;
-- SHOW INDEX FROM `zyt_admin_role`;
-- ============================================
-- 如果索引已存在,先删除再创建(可选)
-- ============================================
-- ALTER TABLE `zyt_appointment` DROP INDEX `idx_doctor_id`;
-- ALTER TABLE `zyt_appointment` DROP INDEX `idx_patient_id`;
-- ALTER TABLE `zyt_appointment` DROP INDEX `idx_status`;
-- ALTER TABLE `zyt_appointment` DROP INDEX `idx_appointment_date`;
-- ALTER TABLE `zyt_appointment` DROP INDEX `idx_status_date_time`;
-- ALTER TABLE `zyt_appointment` DROP INDEX `idx_doctor_status_date`;