六星教育 - java-mysql优化1909
单表超过2000w的数据 ,要求 在不停服务的情况下怎么优化
切忌: 不要上来就说,对常用字段建立索引
优化最为重要的点就是 -> 定位需要优化的数据在哪里(扫描磁盘,快速读取到数据)
潜在点:
对于mysql调节 -> 优化会影响到其他地方
select * 这个 * 会影响到索引的效率 -> 甚至让mysql不适用索引
- 1. 影响mysql的性能问题
表的设计不合理
表的索引建立不合理
- 2. 思路 - 过程
a. 通过慢查询定位执行慢的SQL语句 - 找到要优化的SQL
b. 熟知 表 所对应的业务有哪些 写还是读 - 避免制定的优化影响到其他的模块
c. 熟知数据-以及表结构 => 对应需要优化的SQL关系 - 开始准备优化
1> 集中那些字段
2> 表的字段 - 对应的数据类型(设计之初一定要考虑的)
3> 表中所建立的索引
4> 表的数据和业务的关系
d. 通过热备份(在线备份-项目正在跑就去备份他) -> 把数据表备份到测试服务器去做测试 -- 准备测试
e. 优化
1> 知道insert.. , (update,delete) where => select(对于写数据的操作很难做到本质上的优化,对于性能影响不是很大,写的时候就是找到位置去存储。)
2> update table_name set xx=1 where cc = 1; delete from table_name where cc = 1;
select cc from table_name where cc = 1; (对于修改和删除优化,就是在后面加上查询。)
3> 分析查询的sql => where 字段; 关注需要获取的字段
4> 优先建立联合索引 根据where ; 其次注意可能还要考虑与获取的字段建立联合索引 => 注意使用频率高的字段优先作为最左的索引字段(切记 : 尽量避免 性别,状态 这些字段放在最左)
5> 如果索引已经但到了瓶颈 => 考虑分表
6> 确定方案
7> 性能评估 => 针对受到影响的模块
f. 实施策略-测试
g. 上线实行方案