131 lines
4.4 KiB
MySQL
131 lines
4.4 KiB
MySQL
|
|
-- ================================================
|
|||
|
|
-- 验证优化是否成功执行
|
|||
|
|
-- ================================================
|
|||
|
|
|
|||
|
|
USE study;
|
|||
|
|
|
|||
|
|
-- ================================================
|
|||
|
|
-- 1. 检查 student_class 表的冗余索引是否已删除
|
|||
|
|
-- ================================================
|
|||
|
|
|
|||
|
|
SELECT '=== 检查 student_class 表索引 ===' AS info;
|
|||
|
|
|
|||
|
|
SELECT INDEX_NAME, COLUMN_NAME, SEQ_IN_INDEX, NON_UNIQUE
|
|||
|
|
FROM information_schema.STATISTICS
|
|||
|
|
WHERE TABLE_SCHEMA = 'study'
|
|||
|
|
AND TABLE_NAME = 'student_class'
|
|||
|
|
ORDER BY INDEX_NAME, SEQ_IN_INDEX;
|
|||
|
|
|
|||
|
|
-- 检查 idx_student_id 是否存在
|
|||
|
|
SELECT CASE
|
|||
|
|
WHEN COUNT(*) > 0 THEN '❌ idx_student_id 仍然存在!需要手动删除!'
|
|||
|
|
ELSE '✅ idx_student_id 已成功删除'
|
|||
|
|
END AS result
|
|||
|
|
FROM information_schema.STATISTICS
|
|||
|
|
WHERE TABLE_SCHEMA = 'study'
|
|||
|
|
AND TABLE_NAME = 'student_class'
|
|||
|
|
AND INDEX_NAME = 'idx_student_id';
|
|||
|
|
|
|||
|
|
-- ================================================
|
|||
|
|
-- 2. 检查 sys_user_role 表索引
|
|||
|
|
-- ================================================
|
|||
|
|
|
|||
|
|
SELECT '=== 检查 sys_user_role 表索引 ===' AS info;
|
|||
|
|
|
|||
|
|
SELECT INDEX_NAME, COLUMN_NAME, SEQ_IN_INDEX
|
|||
|
|
FROM information_schema.STATISTICS
|
|||
|
|
WHERE TABLE_SCHEMA = 'study'
|
|||
|
|
AND TABLE_NAME = 'sys_user_role'
|
|||
|
|
ORDER BY INDEX_NAME, SEQ_IN_INDEX;
|
|||
|
|
|
|||
|
|
-- 检查必要的索引是否存在
|
|||
|
|
SELECT CASE
|
|||
|
|
WHEN (SELECT COUNT(*) FROM information_schema.STATISTICS
|
|||
|
|
WHERE TABLE_SCHEMA = 'study' AND TABLE_NAME = 'sys_user_role'
|
|||
|
|
AND INDEX_NAME = 'idx_user_id') > 0
|
|||
|
|
THEN '✅ idx_user_id 存在'
|
|||
|
|
ELSE '❌ idx_user_id 不存在!需要创建!'
|
|||
|
|
END AS user_id_index;
|
|||
|
|
|
|||
|
|
SELECT CASE
|
|||
|
|
WHEN (SELECT COUNT(*) FROM information_schema.STATISTICS
|
|||
|
|
WHERE TABLE_SCHEMA = 'study' AND TABLE_NAME = 'sys_user_role'
|
|||
|
|
AND INDEX_NAME = 'idx_role_id') > 0
|
|||
|
|
THEN '✅ idx_role_id 存在'
|
|||
|
|
ELSE '❌ idx_role_id 不存在!需要创建!'
|
|||
|
|
END AS role_id_index;
|
|||
|
|
|
|||
|
|
-- ================================================
|
|||
|
|
-- 3. 检查 courseware 表索引
|
|||
|
|
-- ================================================
|
|||
|
|
|
|||
|
|
SELECT '=== 检查 courseware 表索引 ===' AS info;
|
|||
|
|
|
|||
|
|
SELECT INDEX_NAME, COLUMN_NAME, SEQ_IN_INDEX
|
|||
|
|
FROM information_schema.STATISTICS
|
|||
|
|
WHERE TABLE_SCHEMA = 'study'
|
|||
|
|
AND TABLE_NAME = 'courseware'
|
|||
|
|
ORDER BY INDEX_NAME, SEQ_IN_INDEX;
|
|||
|
|
|
|||
|
|
SELECT CASE
|
|||
|
|
WHEN (SELECT COUNT(*) FROM information_schema.STATISTICS
|
|||
|
|
WHERE TABLE_SCHEMA = 'study' AND TABLE_NAME = 'courseware'
|
|||
|
|
AND INDEX_NAME = 'idx_course_id') > 0
|
|||
|
|
THEN '✅ idx_course_id 存在'
|
|||
|
|
ELSE '❌ idx_course_id 不存在!需要创建!'
|
|||
|
|
END AS course_id_index;
|
|||
|
|
|
|||
|
|
-- ================================================
|
|||
|
|
-- 4. 检查 learning_detail 表索引
|
|||
|
|
-- ================================================
|
|||
|
|
|
|||
|
|
SELECT '=== 检查 learning_detail 表索引 ===' AS info;
|
|||
|
|
|
|||
|
|
SELECT INDEX_NAME, COLUMN_NAME, SEQ_IN_INDEX
|
|||
|
|
FROM information_schema.STATISTICS
|
|||
|
|
WHERE TABLE_SCHEMA = 'study'
|
|||
|
|
AND TABLE_NAME = 'learning_detail'
|
|||
|
|
ORDER BY INDEX_NAME, SEQ_IN_INDEX;
|
|||
|
|
|
|||
|
|
SELECT CASE
|
|||
|
|
WHEN (SELECT COUNT(*) FROM information_schema.STATISTICS
|
|||
|
|
WHERE TABLE_SCHEMA = 'study' AND TABLE_NAME = 'learning_detail'
|
|||
|
|
AND INDEX_NAME = 'idx_student_course') > 0
|
|||
|
|
THEN '✅ idx_student_course 存在'
|
|||
|
|
ELSE '❌ idx_student_course 不存在!需要创建!'
|
|||
|
|
END AS student_course_index;
|
|||
|
|
|
|||
|
|
-- ================================================
|
|||
|
|
-- 5. 测试查询性能
|
|||
|
|
-- ================================================
|
|||
|
|
|
|||
|
|
SELECT '=== 测试查询性能 ===' AS info;
|
|||
|
|
|
|||
|
|
-- 测试角色查询
|
|||
|
|
SET @start = NOW(6);
|
|||
|
|
SELECT COUNT(*) FROM sys_user_role WHERE user_id = 455;
|
|||
|
|
SET @end = NOW(6);
|
|||
|
|
SELECT TIMESTAMPDIFF(MICROSECOND, @start, @end)/1000 AS '角色查询耗时(ms)';
|
|||
|
|
|
|||
|
|
-- 测试课程查询
|
|||
|
|
SET @start = NOW(6);
|
|||
|
|
SELECT COUNT(*) FROM courseware WHERE course_id = 6;
|
|||
|
|
SET @end = NOW(6);
|
|||
|
|
SELECT TIMESTAMPDIFF(MICROSECOND, @start, @end)/1000 AS '课程查询耗时(ms)';
|
|||
|
|
|
|||
|
|
-- 测试学习详情查询
|
|||
|
|
SET @start = NOW(6);
|
|||
|
|
SELECT COUNT(*) FROM learning_detail WHERE student_id = 9999 AND course_id = 6;
|
|||
|
|
SET @end = NOW(6);
|
|||
|
|
SELECT TIMESTAMPDIFF(MICROSECOND, @start, @end)/1000 AS '学习详情查询耗时(ms)';
|
|||
|
|
|
|||
|
|
-- ================================================
|
|||
|
|
-- 6. 显示结论
|
|||
|
|
-- ================================================
|
|||
|
|
|
|||
|
|
SELECT '=== 优化结果总结 ===' AS info;
|
|||
|
|
|
|||
|
|
SELECT
|
|||
|
|
'如果所有索引都是 ✅,且查询耗时 <50ms,则优化成功!' AS '结论',
|
|||
|
|
'如果有 ❌,请查看下面的手动修复SQL' AS '说明';
|