Mysql优化方案

sql优化

查询性能优化

1、使用 Explain 进行分析

比较重要的字段有:

select_type : 查询类型,有简单查询、联合查询、子查询等
key : 使用的索引
rows : 扫描的行数

2、优化数据访问

  1. 减少请求的数据量
    只返回必要的列:最好不要使用 SELECT * 语句。
    只返回必要的行:使用 LIMIT 语句来限制返回的数据。
    缓存重复查询的数据:使用缓存可以避免在数据库中进行查询,特别在要查询的数据经常被重复查询时,缓存带来的查询性能提升将会是非常明显的。

  2. 减少服务器端扫描的行数
    最有效的方式是使用索引来覆盖查询

3、重构查询方式

  1. 切分大查询
    一个大查询如果一次性执行的话,可能一次锁住很多数据、占满整个事务日志、耗尽系统资源、阻塞很多小的但重要的查询。

  2. 分解大连接查询
    将一个大连接查询分解成对每一个表进行一次单表查询,然后在应用程序中进行关联,这样做的好处有:

     - 让缓存更高效。对于连接查询,如果其中一个表发生变化,那么整个查询缓存就无法使用。而分解后的多个查询,即使其中一个表发生变化,对其它表的查询缓存依然可以使用。
     - 分解成多个单表查询,这些单表查询的缓存结果更可能被其它查询使用到,从而减少冗余记录的查询。
     - 减少锁竞争;
     - 在应用层进行连接,可以更容易对数据库进行拆分,从而更容易做到高性能和可伸缩。
    
合理使用索引

1、如果可以的话给频繁用来查询的字段加上索引,加快查询速度。
2、必要时可以添加联合索引,来覆盖返回结果。
3、注意最左前缀匹配,保证查询的sql语句按照创建的索引顺序来查找,避免创建冗余索引
4、用like进行模糊查询的时候不要使用‘%like%’,而尽量使用‘like%’的形式。另外使用regexp也是不会使用索引的。
5、如果字段使用了函数或者运算操作是不会使用索引的
6、多使用explain去分析sql语句
7、使用union代替or,因为or很多时候是不会使用索引的

一些sql优化案例

sql优化案例分析

mysql优化

配置调优

  1. 选择合适的存储引擎,如果是一个不经常修改的表,而且不需要事务的支持,而且这个表经常要count(*),可以使用MyISAM,因为MyISAM没有行锁、事务这些东西,相对简单,性能更优。
  2. 对于修改频繁的表关闭mysql的缓存功能,因为如果这个表有修改的话,所有缓存都会失效,缓存没起到什么作用,反而加大了维护缓存的开销(配置query_cache_type)
  3. 开启slow_query_log慢查询日志,long_query_time可以根据业务设置,分析执行缓慢的sql语句
  4. 对于频繁操作数据库的业务,连接的时候wati_timeout 可以设置大一些,避免频繁创建连接
  5. 使用连接池
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值