美文网首页
mysql优化

mysql优化

作者: 怡然依旧 | 来源:发表于2017-05-08 10:44 被阅读0次

    硬件

    磁盘 cpu 内存

    服务器系统

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

    存储引擎

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

    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优化

          本文链接:https://www.haomeiwen.com/subject/xwhmtxtx.html