数据库修复: - t_user_health_data_daily: 添加customer_id字段(租户ID) - t_user_health_data_weekly: 添加customer_id字段(租户ID) ljwx-boot同步更新: - TUserHealthDataDailyMapper.xml: 添加customer_id字段映射 - TUserHealthDataWeeklyMapper.xml: 添加customer_id字段映射 其他改进: - 告警规则缓存优化 - Redis缓存性能提升 - 健康数据处理性能优化 - 添加完整的文档和工具脚本 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
127 lines
4.7 KiB
SQL
127 lines
4.7 KiB
SQL
-- 数据库索引优化脚本
|
||
-- 针对健康数据上传压力测试的性能优化
|
||
|
||
USE test;
|
||
|
||
-- =================================
|
||
-- 1. 健康数据表 (t_user_health_data) 索引优化
|
||
-- =================================
|
||
|
||
-- 分析现有索引使用情况
|
||
-- 当前表已有较多索引,但需要针对压力测试场景进行优化
|
||
|
||
-- 1.1 添加用户名查询索引(用于快速定位用户)
|
||
-- 压力测试中经常需要根据用户名查询数据
|
||
CREATE INDEX idx_user_name ON t_user_health_data(user_name);
|
||
|
||
-- 1.2 优化设备SN+时间戳的联合索引(设备数据按时间排序)
|
||
-- 现有的 idx_device_sn 只包含设备SN,需要加上时间戳提高查询效率
|
||
CREATE INDEX idx_device_time_optimized ON t_user_health_data(device_sn, timestamp DESC);
|
||
|
||
-- 1.3 添加用户ID+时间戳索引(用户健康数据时间序列查询)
|
||
CREATE INDEX idx_user_id_time ON t_user_health_data(user_id, timestamp DESC);
|
||
|
||
-- 1.4 添加创建时间索引(用于数据插入性能监控)
|
||
CREATE INDEX idx_create_time ON t_user_health_data(create_time DESC);
|
||
|
||
-- 1.5 优化批量插入的组合索引(customer_id + create_time)
|
||
-- 便于批量操作的快速定位
|
||
CREATE INDEX idx_batch_insert_optimized ON t_user_health_data(customer_id, create_time DESC, device_sn);
|
||
|
||
-- =================================
|
||
-- 2. 用户表 (sys_user) 索引优化
|
||
-- =================================
|
||
|
||
-- 2.1 添加用户名唯一索引(快速用户查找)
|
||
-- 压力测试中需要根据用户名快速查找用户信息
|
||
CREATE UNIQUE INDEX idx_user_name_unique ON sys_user(user_name);
|
||
|
||
-- 2.2 优化设备SN索引(一个设备对应一个用户)
|
||
-- 现有索引已存在,检查是否需要优化
|
||
-- ALTER INDEX idx_sys_user_device_sn RENAME TO idx_device_sn_lookup;
|
||
|
||
-- 2.3 添加状态+客户ID的联合索引(活跃用户查询)
|
||
CREATE INDEX idx_status_customer ON sys_user(status, customer_id, is_deleted);
|
||
|
||
-- =================================
|
||
-- 3. 数据库参数优化
|
||
-- =================================
|
||
|
||
-- 3.1 优化InnoDB缓冲池大小(如果可以修改配置)
|
||
-- innodb_buffer_pool_size = 系统内存的70-80%
|
||
-- 这需要在MySQL配置文件中设置,这里提供建议值
|
||
|
||
-- 3.2 优化插入性能相关参数
|
||
SET GLOBAL innodb_flush_log_at_trx_commit = 2; -- 提高插入性能,降低数据安全性
|
||
SET GLOBAL sync_binlog = 0; -- 提高写入性能
|
||
|
||
-- 3.3 优化查询缓存(MySQL 8.0已移除查询缓存)
|
||
-- SET GLOBAL query_cache_size = 268435456; -- 256MB
|
||
-- SET GLOBAL query_cache_type = ON;
|
||
|
||
-- 3.4 优化连接数
|
||
SET GLOBAL max_connections = 1000; -- 支持更多并发连接
|
||
SET GLOBAL thread_cache_size = 50; -- 线程缓存
|
||
|
||
-- =================================
|
||
-- 4. 表结构优化建议
|
||
-- =================================
|
||
|
||
-- 4.1 分析表空间使用情况
|
||
SELECT
|
||
table_name,
|
||
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "DB Size in MB"
|
||
FROM information_schema.tables
|
||
WHERE table_schema="test" AND table_name IN ('t_user_health_data', 'sys_user');
|
||
|
||
-- 4.2 分析索引使用效率
|
||
SELECT
|
||
TABLE_SCHEMA as `DB`,
|
||
TABLE_NAME as `Table`,
|
||
INDEX_NAME as `Index`,
|
||
CARDINALITY,
|
||
ROUND((CARDINALITY/
|
||
(SELECT table_rows FROM information_schema.tables
|
||
WHERE table_schema = 'test' AND table_name = 't_user_health_data')
|
||
)*100, 2) as `Selectivity %`
|
||
FROM information_schema.STATISTICS
|
||
WHERE TABLE_SCHEMA = 'test'
|
||
AND TABLE_NAME = 't_user_health_data'
|
||
AND INDEX_NAME != 'PRIMARY'
|
||
ORDER BY CARDINALITY DESC;
|
||
|
||
-- =================================
|
||
-- 5. 维护和监控查询
|
||
-- =================================
|
||
|
||
-- 5.1 检查索引使用情况
|
||
SHOW INDEX FROM t_user_health_data;
|
||
SHOW INDEX FROM sys_user;
|
||
|
||
-- 5.2 分析慢查询(需要启用慢查询日志)
|
||
-- SHOW VARIABLES LIKE 'slow_query_log';
|
||
-- SET GLOBAL slow_query_log = 'ON';
|
||
-- SET GLOBAL long_query_time = 1;
|
||
|
||
-- 5.3 检查表状态
|
||
SHOW TABLE STATUS LIKE 't_user_health_data';
|
||
SHOW TABLE STATUS LIKE 'sys_user';
|
||
|
||
-- =================================
|
||
-- 执行完成提示
|
||
-- =================================
|
||
SELECT '数据库索引优化完成!请重新运行压力测试验证效果。' as 'OPTIMIZATION_COMPLETE';
|
||
|
||
-- =================================
|
||
-- 回滚脚本(如需要)
|
||
-- =================================
|
||
/*
|
||
-- 如果需要回滚新添加的索引:
|
||
DROP INDEX IF EXISTS idx_user_name ON t_user_health_data;
|
||
DROP INDEX IF EXISTS idx_device_time_optimized ON t_user_health_data;
|
||
DROP INDEX IF EXISTS idx_user_id_time ON t_user_health_data;
|
||
DROP INDEX IF EXISTS idx_create_time ON t_user_health_data;
|
||
DROP INDEX IF EXISTS idx_batch_insert_optimized ON t_user_health_data;
|
||
DROP INDEX IF EXISTS idx_user_name_unique ON sys_user;
|
||
DROP INDEX IF EXISTS idx_status_customer ON sys_user;
|
||
*/ |