mysql优化教程?

1、对SQL语句、索引、表结构等进行优化。

2、开启查询缓存,Query Cache缓存了SELECT查询及其结果数据集,当执行一个同样的SELECT查询时,MySQL会从内存中直接取出结果,加快了查询执行速度、减小了数据库的压力。执行SHOW VARIABLES LIKE ‘have_query_cache’;可以查看MySQL查询缓存是否打开,开启查询缓存只需配置my.cnf文件即可,具体如下:

query_cache_type = 1

query_cache_size = 128M

query_cache_limit = 1M

保存好后重启MySQL。

3、选用InnoDB存储引擎,MySQL常用存储引擎是MyISAM和InnoDB,二者区别如下:

MyISAM

查询速度快;

支持表级锁,在上锁期间表上不能进行其他操作;

支持全文检索;

支持数据压缩、自我复制、查询缓存、数据加密;

不支持外键;

不支持事务,所以也就没有COMMIT和ROLLBACK操作;

不支持集群数据库。

InnoDB

支持行级锁;

支持外键,对外键约束强制;

支持事务,可执行COMMIT和ROLLBACK操作;

支持数据压缩、自我复制、查询缓存、数据加密;

可用在集群环境,但并不完全支持。InnoDB表可以转换为NDB存储引擎,这样就能用在集群环境。

对数据库优化我认为可以分一下步骤进行:

1、表结构优化;

根据实际项目的业务逻辑,对表结构进行合理拆分,和合并;减少数据冗余;适度的反范式。

对表字段选择适当的字段类型;

2、sql语句优化;

针对一下特定的SQL查询进行优化,可以开启mysql慢日志,锁定慢查询语句然后进行查询优化;具体的优化方案还得根据实际业务来定;比如select * 替换 具体的查询字段;OR改写为IN()查询;查分join查询等等;

3、合理构建索引,优化索引,避免滥用;

建立索引被多少人认为是提升数据库性能的审计,于是甚至有人说把where后面所有的查询字段都加上索引;需要搞清楚的是,索引的确可以大大提高查询效率,但是索引对应添加和更新数据,增加了大量的I/O,而且对表的存在空间增大;不合理的索引反而成了累赘。

4、构建集群;

搭建数据库集群,配合数据库中间件实现读写分离负载均衡;

5、存储业务拆分;

对于一些业务和数据通过其他方式存在进行优化,比如检索字段可以用ES或者Solr进行查分。

MySQL的优化要根据实际业务,并没有什么通用的优化。

其实其他回答都说的很全,

但是我从比较实际的地方说说吧。

第一、开启MySQL的slowLog
slowLog会记录MySQL执行过的慢查询,比较佛系的办法就是让它记录一段时间,

然后查看里面执行的语句。

第二、通过desc的方式来查看慢的原因
比如:SELECT * FROM tbl WHERE Date = CURDATE();

你可以通过执行 desc SELECT * FROM tbl WHERE Date = CURDATE();

这个时候Mysql就会显示执行这句sql的计划,

如果你发现是全表查询,这个时候尝试在Date上增加索引,

然后再跑一次DESC,这个时候你就会发现这句语句已经走了索引。

*通常这个办法能解决90%的慢查询问题。

当上面的问题都无法满足到你的时候,

建议可以参考Mysql官方的参数设定,

然后根据业务特性对MySQL进行特定优化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值