mysql优化

硬件

磁盘 cpu 内存

服务器系统

  • 关闭不必要的二进制日志和慢查询日志,仅在内存足够或开发调试时打开
  • 适度使用query cache
  • 增加mysql允许的最大连接数
  • 定期的执行optimize table tableName 进行碎片整理 ,或者在大量删除后进行
  • 对数据库进行分区,分表操作
  • 使用Nosql辅助,如:Memcached,redis
  • mysql 参数优化

存储引擎

不同的存储引擎都有各自的特点,以适应不同的需求,如下表所示:

mysql优化_第1张图片
Paste_Image.png

如果要提供提交、回滚、崩溃恢复能力的事物安全(ACID兼容)能力,并要求实现并发控制,InnoDB是一个好的选择

如果数据表主要用来插入和查询记录,则MyISAM引擎能提供较高的处理效率

如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存中的Memory引擎,MySQL中使用该引擎作为临时表,存放查询的中间结果

如果只有INSERT和SELECT操作,可以选择Archive,Archive支持高并发的插入操作,但是本身不是事务安全的。Archive非常适合存储归档数据,如记录日志信息可以使用Archive

使用哪一种引擎需要灵活选择,一个数据库中多个表可以使用不同引擎以满足各种性能和实际需求,使用合适的存储引擎,将会提高整个数据库的性能

数据库表结构设计

  • 选取最适用的字段属性
    MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。
  • 简历索引
    索引是提高数据库性能的常用方法,它可以令数据库服务器以比没有索引快得多的速度检索特定的行
    索引应建立在那些将用于JOIN,WHERE判断和ORDERBY排序的字段上。尽量不要对数据库中某个含有大量重复的值的字段建立索引
    有组合查询的sql,尽量建立组合索引,组合索引遵循最左优先原则,组合索引的第一个字段必须出现在查询组句中,这个索引才会被用到

sql语句

1. 如果同时从同一客户端插入大量数据,应该尽量使用多个值的表的INSERT 语句
2. 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描
3. 避免在 where 子句中对字段进行 null 值判断
4. 尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描
5. 慎用 like、in、not in
6. 尽量避免在 where 子句中对字段进行表达式操作
7. 尽量避免在where子句中对字段进行函数操作
8. 不要在 where 子句中的左边进行函数、算术运算或其他表达式运算
9. 用 exists 代替 in
10. 任何地方都不要使用 select *  ,用具体的字段列表代替“*”,不要返回用不到的字段
11. 避免大事物操作
12. 用explain 测试sql

你可能感兴趣的:(mysql优化)