- Q: 为什么别人问你 MySQL 优化的知识 总是没有底气.
- A: 因为你只是回答一些大而化之的调优原则,
- 比如:”建立合理索引”(什么样的索引合理?) “
- 分表分库”(用什么策略分表分库?)
- “主从分离”(用什么中间件?)
- 并没有从细化到定量的层面去分析.
- 如 qps 提高了%N? 有没有减少文件排序?语句的扫描行数减少了多少?
- 没有大量的数据供测试,一般在学习环境中,只是手工添加几百上万条数据, 数据量小,看不出语句之间的明确区别.
- Q: 如何提高 MySQL 的性能?
- A: 需要优化,则说明效率不够理想. 因此我们首先要做的,不是优化,而是--诊断. 治病的前提,是诊病,找出瓶颈所在. CPU,内存,IO? 峰值,单条语句?
话不多说,步入正题!
一. MySQL安装
https://www.cnblogs.com/ayyl/p/5978418.html
二.mysql 性能调优的思路
0: 最好的优化不查
![](https://img2018.cnblogs.com/blog/1464728/201812/1464728-20181204202447677-1348680619.png)
如果一台服务器出现长时间负载过高 /周期性负载过大,或偶尔卡住如何来处理?
大的思路-------- 是周期性的变化还是偶尔问题?
是服务器整体性能的问题, 还是某单条语句的问题?
具体到单条语句, 这条语句是在等待上花的时间,还是查询上花的时间. 唯一的办法-----监测并观察服务器的状态. 1:观察服务器状态, 一般用如下 2 个命令
Show status; Show processlist;
1:建表: 表结构的拆分,如核心字段都用 int,char,enum 等定长结构
表的优化与列类型选择
表的优化:
1: 定长与变长分离
text,blob, 如 id int, 占 4 个字节, char(4) 占 4 个字符长度,也是定长, time即每一单元值占的字节是固定的. 核心且常用字段,宜建成定长,放在一张 ### 表. 而 varchar, 这变长字段,适合单放一张表, 用主键与核心表关联起来.
2:常用字段和不常用字段要分离. 需要结合网站具体的业务来分析,分析字段的查询场景,查询频度低的字段,单拆出来.
3:合理添加冗余字段
2:非核心字段,或用到 text,超长的 varchar,拆出来单放一张表. 建索引: 合理的索引可以减少内部临时表(索引优化策略里详解)
3:写语句: 不合理的语句将导致大量数据传输以及内部临时表的使用.