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:更新操作的次数

一、优化查询

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

1.分析查询语句

explain select 语句;

mysql性能优化有哪些 mysql的性能优化包括_mysql


Id:表示select语句的编号

table:查询的表

possible_keys:可能使用的索引

key:查询使用到的索引

key_len:表示索引字段的长度

ref:表示使用那个列或常数与索引一起来查询记录;

rows:表示查询的行数

extra:表示查询过程的附件信息。

二、索引对查询速度的影响;

我们通过某个字段查询某条记录,我们需要扫描整个表,而设置索引,可以快速定位表中的某条记录。使用索引可以提高数据库查询速度。

2.1查询语句中使用like关键字

如果匹配字段串的第一个字符为%时,索引不会被使用,如果%不是在第一个位置,索引就会被使用。

explain select * from student where name like'zy%'\G

2.2查询语句中使用多列索引

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

create index index_birth_department on student(birth,department)

explain select * from student where birth=1991\G   使用到了

explain select * from student where department=1991\G   没有使用到索引

2.3.查询语句中使用or关键字

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

优化子查询:

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

三、优化数据库结构

查找记录:

3.1将字段很多的表分解成多个表

Eg.对于有些备注信息,在查询过程种很少用到,那么可以将其放在另一个表中;

3.2增加中间表

eg.对学生表和成绩表,需要输出成绩表中的学号、姓名以及成绩表中的成绩,因此可以直接生成一个含有学号姓名成绩的表,减少连表查询的效率。牺牲磁盘空间。

3.3增加冗余字段

eg.学生表:学号    学院编号        

   学院信息:学院编号   学院名称

想查找某个同学所在学院名称,需要连表查询,先在学生表中查找到学院编号,在通过学院编号在学院信息表中查找对应的学院名称。

优化插入记录速度:

1.禁用索引

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

禁用索引:

alter table 表名  disable keys;

重新开启索引:

alter table 表名  enable keys;

2.禁用唯一性检查

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

禁用唯一性检查: set unique_checks=0;

重新开启唯一性检查  set  unique_checks=1;

3.优化insert语句

插入多条记录时,采用一次插入多条语句效率较高

分析表、检查表和优化表

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

1.分析表

analyze table 表名1

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

2.检查表

check table  表名【option】

检查表是否存在错误,能够检查innodb和myisam类型的表

但option只对mysiam类型有效。option  -----quick\fast \changed\medium\extended

3.优化表

optimize table 表名1

INNODB和myisam表可以,只能优化表中varchar.blob,test类型字段。

如果一个表使用了test\blob这样的数据类型,那么更新、删除等操作就会造成磁盘空间的浪费。因为,更新和删除操作后,以前分配的磁盘空间不会自动收回,使用optimize table语句就可以将这些磁盘碎片整理出来,以便以后再利用。