guoyu/Test/sql/verify_optimization.sql

131 lines
4.4 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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