Mysql性能优化思路

(一)硬件方面

如果数据量大,每次访问数据量小,交互频繁,并发高,OLTP型应用系统,就要选取功能好的CPU和网络设备。如果数据量超大,每次访问数据量小,并发低,也就是OLAP应用,就对CPU要求不高,但是要求存储大,最好做集群。

(二)MySQL数据库系统启动参数配置

几个常见的参数设置:

query_cache_size:对热点数据进行缓存,提高命中率。

sort_bufer_size:在需要排序时,分配指定大小的内存进行排序。否则会进行磁盘IO排序,性能很低。这个参数不能随便设置过大。

read_bufer_size:查询时分配该大小的内存作为缓存。一般来说配置修改不需要经常变动,要慎重。

(三)表结构优化

数据类型优化,减少不必要的列,减少关联,设计的三范式要求,视图的使用等等。

(四)SQL语句和索引优化

索引可以大大减少服务器扫描的数据量,避免排序。

单列索引:最好是常用的列,离散型高,长度适中的。

多列索引:建立合适的组合索引,如果经常用到多个单列索引,最好考虑这个,顺序优先将选择性高的放在前面。

聚簇索引:数据访问更快,直接从索引节点获取数据,减少磁盘IO。缺点:提高了IO密集型应用,插入性能严重依赖插入顺序,最好按照主键顺序插入。更新聚簇索引的代价很高。

覆盖索引:只需要访问二级索引,不需要访问数据,减少数据访问量,explain的时候,如果extra是using index,表示使用了覆盖索引。

特定语句优化:

count:在业务上如果可以用近似值,可以的话,可以使用explain的rows或者对这个值进行缓存,定时刷新。myisam引擎统计很快,因为不需要再次扫描统计。

关联查询优化:被关联的列上一定要建立索引,确保groupby和orderby字段没有分布在2个表,否则不能使用索引完成排序。

优化limit分页:分页使用扫描偏移量大小数据,然后只截取部分数据,非常耗性能。可以尝试下面2个手段,使用一个覆盖索引子查询分页,查询出符合条件的主键ID,然后与原表关联查询出所有数据。覆盖索引可以大大减少扫描页面。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值