MYSQL优化相关
2019-08-23 本文已影响0人
peanut___
mysql优化3大方向:
- 优化mysql所在服务器内核(运维完成)对mysql配置参数进行优化(my.cnf),此优化需要进行压力测试进行参数调整
- 建表时的优化
- 对sql语句的优化
一、mysql参数优化
mysql 默认最大连接数为100,查看命令:show variables like 'max_connections'; (该机器最大连接数)
设置最大连接数 set global max_connections = 100;
查看当前被使用的连接 show global status like '%connections%';
注意:设置最大连接的时候需要小于max_connections,大约在85%
二、表优化
尽量定义not null约束,null会是索引统计复杂,可以用0或空代替
可以使用enum(单选)、set(多选)等符合数据类型的字段。工作中一般用tinyint
能用整型字段的都用整型字段
建立索引
分表垂直拆分,水平拆分(最多数据千万使用分表)
垂直分表:基于冷数据和热数据。冷数据用MyIsam加快查询,热数据用Innodb加快更新。
水平分表:数据量大的时候
三、sql优化
- 有些函数会不使用mysql缓存
- explain或desc来查看索引使用情况
- 不要用order by rand()
- 拆分大的insert和delete
- ORM对象关系映射
- 联查时候在字段前加上表别名
- 联查分页,先分页在联查
- where子句使用, 导致全表扫描的有:
- !=、<>、or、%22%,
- 使用参数@num,@表示变量
select id from a where num=@num
可以改为 select id from t with(index(索引名)) where num=@num (强制使用索引)
- not in、in(主键索引not in 和 in 不会,in单条数据不会)
- 对字段进行表达式,
select id from t where num/2=100
改为 select id from t where num=100*2