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

一、优化查询

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

1.分析查询语句

explain select 语句;

MSQL: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语句就可以将这些磁盘碎片整理出来,以便以后再利用。