02_create_system_indexes.sql 6.21 KB
-- Apple经销商ERP系统对接项目 - 系统管理表索引创建脚本
-- 创建时间: 2025-01-27
-- 版本: v1.0

-- 设置数据库和字符集
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

USE apple_erp;

-- =========================================
-- 1. 系统用户表索引
-- =========================================

-- 用户名唯一索引(已通过UNIQUE约束自动创建)
-- CREATE UNIQUE INDEX uk_user_username ON t_sys_user(username);

-- 查询优化索引
CREATE INDEX idx_user_status ON t_sys_user(status);
CREATE INDEX idx_user_create_time ON t_sys_user(create_time);
CREATE INDEX idx_user_last_login ON t_sys_user(last_login_time);
CREATE INDEX idx_user_del_flag ON t_sys_user(del_flag);

-- 复合查询索引
CREATE INDEX idx_user_complex_query ON t_sys_user(status, del_flag, create_time);

-- =========================================
-- 2. 系统角色表索引
-- =========================================

-- 角色编码唯一索引(已通过UNIQUE约束自动创建)
-- CREATE UNIQUE INDEX uk_role_code ON t_sys_role(role_code);

-- 查询优化索引
CREATE INDEX idx_role_status ON t_sys_role(status);
CREATE INDEX idx_role_create_time ON t_sys_role(create_time);
CREATE INDEX idx_role_del_flag ON t_sys_role(del_flag);

-- 复合查询索引
CREATE INDEX idx_role_complex_query ON t_sys_role(status, del_flag, create_time);

-- =========================================
-- 3. 用户角色关联表索引
-- =========================================

-- 外键索引
CREATE INDEX idx_user_role_user_id ON t_sys_user_role(user_id);
CREATE INDEX idx_user_role_role_id ON t_sys_user_role(role_id);

-- 唯一约束索引(防止重复关联)
CREATE UNIQUE INDEX uk_user_role_unique ON t_sys_user_role(user_id, role_id, del_flag);

-- 查询优化索引
CREATE INDEX idx_user_role_del_flag ON t_sys_user_role(del_flag);

-- =========================================
-- 4. 系统菜单表索引
-- =========================================

-- 父菜单索引
CREATE INDEX idx_menu_parent_id ON t_sys_menu(parent_id);

-- 查询优化索引
CREATE INDEX idx_menu_type ON t_sys_menu(menu_type);
CREATE INDEX idx_menu_status ON t_sys_menu(status);
CREATE INDEX idx_menu_sort ON t_sys_menu(sort);
CREATE INDEX idx_menu_del_flag ON t_sys_menu(del_flag);

-- 复合查询索引
CREATE INDEX idx_menu_complex_query ON t_sys_menu(parent_id, menu_type, status, del_flag, sort);

-- 权限查询索引
CREATE INDEX idx_menu_perms ON t_sys_menu(perms);

-- =========================================
-- 5. 角色菜单关联表索引
-- =========================================

-- 外键索引
CREATE INDEX idx_role_menu_role_id ON t_sys_role_menu(role_id);
CREATE INDEX idx_role_menu_menu_id ON t_sys_role_menu(menu_id);

-- 唯一约束索引(防止重复关联)
CREATE UNIQUE INDEX uk_role_menu_unique ON t_sys_role_menu(role_id, menu_id, del_flag);

-- 查询优化索引
CREATE INDEX idx_role_menu_del_flag ON t_sys_role_menu(del_flag);

-- =========================================
-- 6. 字典类型表索引
-- =========================================

-- 字典类型唯一索引(已通过UNIQUE约束自动创建)
-- CREATE UNIQUE INDEX uk_dict_type ON t_sys_dict_type(dict_type);

-- 查询优化索引
CREATE INDEX idx_dict_type_status ON t_sys_dict_type(status);
CREATE INDEX idx_dict_type_create_time ON t_sys_dict_type(create_time);
CREATE INDEX idx_dict_type_del_flag ON t_sys_dict_type(del_flag);

-- 复合查询索引
CREATE INDEX idx_dict_type_complex_query ON t_sys_dict_type(status, del_flag, create_time);

-- =========================================
-- 7. 字典项表索引
-- =========================================

-- 外键索引
CREATE INDEX idx_dict_item_type_id ON t_sys_dict_item(dict_type_id);

-- 查询优化索引
CREATE INDEX idx_dict_item_sort ON t_sys_dict_item(sort);
CREATE INDEX idx_dict_item_del_flag ON t_sys_dict_item(del_flag);

-- 复合查询索引
CREATE INDEX idx_dict_item_complex_query ON t_sys_dict_item(dict_type_id, sort, del_flag);

-- 字典值查询索引
CREATE INDEX idx_dict_item_value ON t_sys_dict_item(dict_value);

-- =========================================
-- 8. 系统日志表索引
-- =========================================

-- 查询优化索引
CREATE INDEX idx_log_type ON t_sys_log(log_type);
CREATE INDEX idx_log_user_id ON t_sys_log(user_id);
CREATE INDEX idx_log_username ON t_sys_log(username);
CREATE INDEX idx_log_module ON t_sys_log(module);
CREATE INDEX idx_log_time ON t_sys_log(log_time);
CREATE INDEX idx_log_status ON t_sys_log(status);
CREATE INDEX idx_log_del_flag ON t_sys_log(del_flag);

-- 复合查询索引
CREATE INDEX idx_log_complex_query ON t_sys_log(log_type, log_time, user_id, del_flag);
CREATE INDEX idx_log_user_query ON t_sys_log(user_id, log_time, del_flag);
CREATE INDEX idx_log_module_query ON t_sys_log(module, log_time, del_flag);

-- IP查询索引
CREATE INDEX idx_log_ip ON t_sys_log(ip);

-- =========================================
-- 外键约束创建
-- =========================================

-- 用户角色关联表外键
ALTER TABLE t_sys_user_role 
ADD CONSTRAINT fk_user_role_user_id 
FOREIGN KEY (user_id) REFERENCES t_sys_user(user_id) 
ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE t_sys_user_role 
ADD CONSTRAINT fk_user_role_role_id 
FOREIGN KEY (role_id) REFERENCES t_sys_role(role_id) 
ON DELETE CASCADE ON UPDATE CASCADE;

-- 角色菜单关联表外键
ALTER TABLE t_sys_role_menu 
ADD CONSTRAINT fk_role_menu_role_id 
FOREIGN KEY (role_id) REFERENCES t_sys_role(role_id) 
ON DELETE CASCADE ON UPDATE CASCADE;

ALTER TABLE t_sys_role_menu 
ADD CONSTRAINT fk_role_menu_menu_id 
FOREIGN KEY (menu_id) REFERENCES t_sys_menu(menu_id) 
ON DELETE CASCADE ON UPDATE CASCADE;

-- 字典项表外键
ALTER TABLE t_sys_dict_item 
ADD CONSTRAINT fk_dict_item_type_id 
FOREIGN KEY (dict_type_id) REFERENCES t_sys_dict_type(dict_type_id) 
ON DELETE CASCADE ON UPDATE CASCADE;

-- 系统日志表外键(可选,因为日志表可能包含已删除用户的数据)
-- ALTER TABLE t_sys_log 
-- ADD CONSTRAINT fk_log_user_id 
-- FOREIGN KEY (user_id) REFERENCES t_sys_user(user_id) 
-- ON DELETE SET NULL ON UPDATE CASCADE;

-- 重置外键检查
SET FOREIGN_KEY_CHECKS = 1;

-- 脚本执行完成提示
SELECT 'Apple经销商ERP系统管理表索引创建完成!' AS message;