MySQL-性能优化

有志者,事竟成
文章持续更新,可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。

在这里插入图片描述

文章目录

  • 前言
  • 一、优化简介
  • 二、优化查询
    • 1、分析查询语句
    • 2、索引对查询速度的影响
    • 3、使用索引查询
    • 4、优化子查询
  • 三、优化数据库结构
    • 1、将字段很多的表分解成多个表
    • 2、增加中间表
    • 3、增加冗余字段
    • 4、优化插入记录的速度
    • 5、分析表、检查表和优化表
  • 四、优化mysql服务器
    • 1、优化服务器硬件
    • 2、优化mysql的参数
  • 五、总结


前言

性能优化是通过某些有效的方法提高mysql数据库的性能。性能优化的目的是为了使mysql数据库运行速度更快、占用的磁盘空间更小。性能优化包括很多方面,例如优化查询速度、优化更新速度和优化mysql服务器等。

一、优化简介

优化mysql数据库是数据库管理员的必备技能。通过不同的优化方式达到提高mysql数据库性能的目的。

数据库管理员可以使用show status语句查询mysql数据库的性能。语法形式如下:

show status like 'value';

其中,value参数是常用的几个统计参数。这些常用参数介绍如下。

connections:连接mysql服务器的次数;
uptime:mysql服务器的上线时间;
slow_queries:慢查询的次数;
com_select:查询操作的次数;
com_insert:插入操作的次数;
com_update:更新操作的次数;
com_delete:删除操作的次数。

二、优化查询

查询是数据库中最频繁的操作。提高了查询速度可以有效的提高mysql数据库的性能。

1、分析查询语句

通过对查询语句的分析,可以了解查询语句的执行情况。mysql中,可以使用explain语句和describe语句来分析查询语句。

explain语句的基本语法如下:

explain select 语句;

通过explain关键字可以分析后面的select语句的执行情况。并且能够分析出所查询的表的一些内容。

2、索引对查询速度的影响

索引可以快速的定位表中的某条记录。使用索引可以提高数据库查询的速度,从而提高数据库的性能。

如果查询时不使用索引,查询语句将查询表中的所有字段。这样查询的速度会很慢。如果使用索引进行查询,查询语句只查询索引字段。这样可以减少查询的记录数,达到提高查询速度的目的。

3、使用索引查询

索引可以提高查询的速度。但是有些时候即使查询时使用的是索引,但索引并没有起作用。

1、查询语句中使用like关键字

在查询语句中使用like关键字进行查询时,如果匹配字符串的第一个字符为“%”时,索引不会被使用。如果“%”不是在第一个位置,索引就会被使用。

2、查询语句中使用多列索引

多列索引是在表的多个字段上创建一个索引。只有查询条件中使用了这些字段中第一个字段时,索引才会被使用。

3、查询语句中使用or关键字

查询语句只有or关键字时,如果or前后的两个条件的列都是索引时,查询中将使用索引。如果or前后有一个条件的列不是索引,那么查询中将不使用索引。

4、优化子查询

很多查询中需要使用子查询。子查询可以使查询语句很灵活,但子查询的执行效率不高。子查询时,mysql需要为内层查询语句的查询结果建立一个临时表。然后外层查询语句再临时表中查询记录。查询完毕后,mysql需要撤销这些临时表。因此,子查询的速度会受到一定的影响。如果查询的数据量比较大,这种影响就会随之增大。在mysql中可以使用连接查询来替代子查询。连接查询不需要建立临时表,其速度比子查询要快。

三、优化数据库结构

数据库结构是否合理,需要考虑是否存在冗余、对表的查询和更新的速度、表中字段的数据类型是否合理等多方面的内容。

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

有些表在设计时设置了很多的字段。这个表中有些字段的使用频率很低。当这个表的数据量很大时,查询数据的速度就会很慢。

对于这种字段特别多且有些字段的使用频率很低的表,可以将其分解成多个表。

2、增加中间表

有时需要经常查询某两个表中的几个字段。如果经常进行联表查询,会降低mysql数据库的查询速度。对于这种情况,可以建立中间表来提高查询速度。

3、增加冗余字段

设计数据库表时尽量让表达到三范式。但是,有时为了提高查询速度,可以有意识地在表中增加冗余字段。

4、优化插入记录的速度

插入记录时,索引、唯一性校验都会影响到插入记录的速度。而且,一次插入多条记录和多次插入记录所耗费的时间是不一样的。根据这些情况,分别进行不同的优化。

1、禁用索引

插入记录时,mysql会根据表的索引对插入的记录进行排序。如果插入大量数据时,这些排序会降低插入记录的速度。为了解决这种情况,在插入记录之前先禁用索引。等到记录都插入完毕后再开启索引。禁用索引的语句如下:

alter table 表名 disable keys;

重新开启索引的语句如下:

alter table 表名 enable keys;

对于新创建的表,可以先不创建索引。等到记录都导入以后再创建索引。这样可以提高导入数据的速度。

2、禁用唯一性检查

插入数据时,mysql会对插入的记录进行唯一性校验。这种校验也会降低插入记录的速度。可以在插入记录之前禁用唯一性检查。等到记录插入完毕后再开启。禁用唯一性检查的语句如下:

set unique_checks=0;

重新开启唯一性检查的语句如下:

set unique_checks=1;

3、优化insert语句

插入多条记录时,可以采取两种写insert语句的方式。第一种是一个insert语句插入多条记录。

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

分析表主要作用是分析关键字的分布。检查表主要作用是检查表是否存在错误。优化表主要作用是消除删除或者更新造成的空间浪费。

1、分析表

mysql中使用analyze table语句来分析表,该语句的基本语法如下:

analyze table 表名1 [,表名2...]

使用analyze table分析表的过程中,数据库系统会对表加一个只读锁。在分析期间,只能读取表中的记录,不能更新和插入记录。analyze table语句能够分析innodb和myisam类型的表。

2、检查表

mysql中使用check table语句来检查表。check table语句能够检查innodb和myisam类型的表是否存在错误。而且,该语句还可以检查视图是否存在错误。该语句的基本语法如下:

check table 表名1 [,表名2...][option];

其中,option参数有5个参数,分别是quick、fast、changed、medium和extended。这5个参数的执行效率依次降低。option选项只对myisam类型的表有效,对innodb类型的表无效。check table语句在执行过程中也会给表加上只读锁。

3、优化表

mysql中使用optimize table语句来优化表。该语句对innodb和myisam类型的表都有效。但是,optilmize table语句只能优化表中的varchar、blob或text类型的字段。optilmize table语句的基本语法如下:

optimize table 表名1 [,表名2...];

通过optimize table语句可以消除删除和更新造成的磁盘碎片,从而减少空间的浪费。optimize table语句在执行过程中也会给表加上只读锁。

四、优化mysql服务器

优化mysql服务器可以从两个方面来理解。一个是从硬件方面来进行优化;另一方面是从mysql服务的参数进行优化。通过这些优化方式,可以提供mysql的运行速度。但是这部分的内容很难理解,一般只有专业的数据库管理员才能进行这一类的优化。

1、优化服务器硬件

服务器的硬件性能直接决定者mysql数据库的性能。例如,增加内存和提高硬盘的读写速度,可以提高mysql数据库的查询、更新的速度。

2、优化mysql的参数

内存中会为mysql保留部分的缓存区。这些缓冲区可以提高mysql数据库的处理速度。缓存区的大小都是在mysql的配置文件中进行设置的。

五、总结

这里的相关内容还没有整理完毕,文章后面持续更新,建议收藏。

文章中涉及到的命令大家一定要像我一样每个都敲几遍,只有在敲的过程中才能发现自己对命令是否真正的掌握了。

可以微信搜索【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。

你可能感兴趣的:(MySQL,mysql,性能优化,数据库)