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类型的表无效


    

mysql order by 性能优化 mysql常用性能优化_mysql order by 性能优化

   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>待总结...