-- 预约表索引优化
-- 用于提升预约列表查询性能

-- 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`;
