• MySQL-快速入门(14)MySQL性能优化


    1、MySQL性能优化包括查询速度优化、数据库结构优化、数据库服务器优化等。

      优化的切入点:合理的结构设计、表结构、索引、查询语句。

    2、show status查询数据库的性能参数

    show status like 'value';

    value:
    Connections=>连接MySQL服务器的次数
    Uptime=>MySQL服务器的上线时间
    Slow_queries=>慢查询的次数
    Com_select=>查询操作的次数
    Com_insert=>插入操作的次数
    Com_update=>更新操作的次数
    Com_delete=>删除操作的次数

    3、查询优化

       1》分析查询语句:explain语句、describe语句

    explain [extended] select select_options
    describe select select_options
    或者
    desc select select_options

       2》索引优化:给相关字段加上索引

       3》使用索引查询:一些不走索引的情况

          1>使用like关键字查询语句:%在匹配字符串第一个,导致不走索引。

          2>使用多列索引的查询语句:没有使用多列索引的第一个字段,导致不走索引。

          3>使用or关键字的查询语句:查询语句的查询条件只有or关键字,且or前后的两个条件中的列都是索引列时,查询才使用索引。否则不走索引。

          4>优化子查询:子查询需要建立临时表,增加开销。使用join连接查询代替子查询,不需要创建临时表,所以效率更高。

    4、优化数据库结构

      1》将字段很多的表分解成多个表

      2》增加中间表:频繁联合查询、查询业务比较复杂

      3》增加冗余字段:对A、B表经常需要关联、但A表只使用到B表的少数字段,可以直接在A表增加这些字段。

      4》优化插入记录的速度:

         影响插入速度的主要是索引、唯一性约束、一次插入记录条数等。

         =>对于MyISAM引擎的表:

            1>禁用索引:对于非空表。空表不需要这样操作。

    alter table tb_name disable keys;
    //
    alter table tb_name enable keys;

            2>禁用唯一性检查

    set unique_checks=0//
    set unique_checks=1;

            3>使用批量插入

    insert into tb_name values 
    (value,value,...),
    (value,value,...),...;

            4>使用load data infile批量导入:能使用load data infile的尽量使用这种方式,比insert快。

        =>对于InnoDB引擎的表:

            1>禁用唯一性检查:用法同MyISAM引擎的用法。

            2>禁用外键检查

    set foreign_key_checks=0;
    //
    set foreign_key_checks=1;

           3>禁止自动提交

    set autocommit=0;
    //
    set autocommit=1;

      5》分析表、检查表、优化表

           分析表:主要分析表的关键字分布。

           检查表:主要是检查表是否存在错误。

           优化表:主要是消除删除或更新造成的空间浪费。

         1>分析表:analyze table语句

    --local关键字是no_write_to_binlog关键字的别名,二者执行过程不写入二进制日志
    --使用analyze table分析表的过程中,数据库系统会自动对表加一个只读锁
    --即过程当中只能从表读取数据,不能插入或者更新数据
    --可以分析InnoDB、BDB、MyISAM类型的表 
    analyze [local | no_write_to_binlog] table tb_name[,tb_name]...

         2>检查表

    --可以检查InnoDB、MyISAM类型的表是否存在错误。
    --对于MyISAM类型的表,check table语句还会更新关键字统计数据
    --还可以检查视图是否有错误,如在视图中定义被引用的表已经不存在了
    --同样会给表加只读锁
    check table tb_name[,tb_name] ... [option] ... option={quick | fast | medium | extended | changed} --只对MyISAM类型的表有效,InnoDB类型的表无效

        

       3>优化表

    --对InnoDB、MyISAM表有效。但optimize table只能优化表中varchar、blob、text类型的字段
    --local是no_wirte_to_binlog的别名,指定不写入二进制日志
    --optimize table语句可以消除删除、更新造成的文件碎片
    --执行过程会给表加只读锁
    optimize [local | no_write_to_binlog] table tb_name[,tb_name] ...

    5、优化MySQL服务器

      1》优化服务器硬件

          1>配置大内存、增加缓冲区容量

          2>配置高速磁盘子系统

          3>合理分布磁盘I/O,将磁盘I/O分散在多个设备上,减少资源竞争等待,提高并行能力。

          4>配置多处理器

      2》优化MySQL服务的参数

          1>待总结...

  • 相关阅读:
    How To Monitor Remote Linux Host using Nagios 3.0
    Nagios的安装配置与应用之五监控远程Linux服务器
    Unix/Linux下如何使用Vi编辑器
    Nagios Apache报Internal Server Error错误的解决方法
    EMQ X 插件持久化系列 (五)MySQL MQTT 数据存储
    MQTT 5.0
    发布说明
    EMQ X 插件持久化系列 (四)PostgreSQL 数据持久化
    EMQ X 规则引擎系列(十四)- 桥接消息到 Pulsar
    如何使用 MQTT 报文实现发布订阅功能
  • 原文地址:https://www.cnblogs.com/ZeroMZ/p/11486106.html
Copyright © 2020-2023  润新知