zoukankan      html  css  js  c++  java
  • MYSQL优化

    mysql的性能优化有有三个层面

    一、基于sql语句的优化

      1. 避免在查询的列上进行运算,这样会导致索引失效
      2. 使用join时 应用小结果集驱动大结果集,复杂的join可以进行拆分成多个query
      3. like模糊查询的时候 避免时候双百分号 %%
      4. 按需查询,仅查询出需要的字段 这样虽然不会增加查询速度 但是可以节省内存
      5. 插入多条数据的时候 使用批量插入 可以节省交互次数
      6. lmit基数比较大的时候 应该使用between
      7. 不要使用rand获取多条随机记录
      8.避免使用空值 因为使用空值的时候 mysql每次都会去检测是否为空
      9. 获取数据数量的时候  使用count(*) 而不要去count(column)
      10. 不做无谓的排序操作 需要排序的操作 尽可能的使用索引

    二、基于mysql的配置

      1.选择合适的数据库存储引擎

        mysql有9种数据库存储引擎,分别是FEDERATED,MRG_MYSIAM,MyIAM,BLACKHOLE,CSV,MEMORY,ARCHIVE,InnoDB和PERFORMANCE_SCHEMA,常用的有MyISAM,InnoDB和MEMORY

        在命令行下可以使用SHOW ENGINES;命令来查看数据库引擎,目前mysql5.5以上的默认存储引擎是InnoDB。

        MyISAM存储引擎不支持事务,不支持外键,内存占用较低,所以访问速度较快。对事务没有完整性要求并且以访问为主的应用选择MyISAM存储引擎

        InnoDB在事务上有优势,锁的粒度精确到行锁,但是对比MyISAM,消耗的内存空间大,在需要对数据进行频繁更新、删除操作并且要实现并发控制应该选用InnoDB存储引擎

        MEMORY引擎使用内存来存储数据,数据访问速度很快,但是安全上没有保障,对于需要快速访问,并且涉及数据较小重要性不高的时候,应该选用此引擎

        如果进行主从配置的时候,把读与写的操作进行分离的话,那么主服务器应该选用InnoDb存储引擎,而从服务器只进行读的操作,选择MyISAM是最优的选择,对于MEMROY的使用场景,也可以考虑使用memcache或者redis来代替,存储session的时候,最    优的方案是redis,因为内存中的数据容易丢失,redis数据库有持久化的过程,对数据的稳定和安全性有保障

      2.调整数据库配置

        关闭不必要的二进制查询日志和慢查询日志,启用日志会对占用内存,内存虽然很便宜,但是比硬盘要贵的多

        适度使用query cache  缓存是一项非常有用的技术  而且无处不在  合理使用缓存带来的优势是非常大的

        在配置中增加mysql的最大连接数  

        在表中删除大量行后,会留下许多的数据碎片,利用OPTIMIZE TABLE tablename;命令可以对数据表进行碎片整理

    三、应用层面

      1.数据比较庞大的时候,可以对数据的id进行哈希之后,分区分表操作,减少单表的体积,可以增加查询的效率

      2.必要的使用使用NOSQL解决方案,两者相互配合

      3.可以把硬盘升级成固态硬盘,普通硬盘因为机械臂读取数据的局限性,比固态硬盘读取数据的方式要慢的多

      4.MYSQL是开源的产品,可以对mysql软件进行二次开发,针对所对应的业务进行优化操作

        

  • 相关阅读:
    tomcat最大连接数
    【转】性能测试总结---测试流程篇
    nginx访问量统计
    在Excel中计算过去某一天到今天一共多少天
    Linux服务器/etc/profile
    Linux服务器安装MySQL
    idea无法识别maven项目
    python3 实现RC4加解密
    Python实现128-ECB 解密
    BlowFish加解密原理与代码实现
  • 原文地址:https://www.cnblogs.com/crisenchou/p/5631053.html
Copyright © 2011-2022 走看看