guoyu/log/Sql/verify_optimization.sql

131 lines
4.4 KiB
MySQL
Raw Normal View History

-- ================================================
-- 验证优化是否成功执行
-- ================================================
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 '说明';