MYSQL性能优化是通过某些有效的方法提高MYsql数据库的性能,
优化查询
优化数据库结构
优化mysql服务器;
查询mysql数据库的性能:
show status like ‘values’;
其中value参数是常用的几个统计参数,有:
connections: 链接Mysql服务器的次数。
uptime : MYSQL服务器的上线时间。
slow_queries: 慢查询的次数
com_select:查询操作次数
com_insert: 插入操作次数
com_update:更新操作次数
com_delete: 删除操作次数。
优化查询:
分析查询语句:通过对查询语句的分析可以了解语句的执行情况,
EXPLAIN | DESC SELECT 语句: 可以分析查询语句:
结果:
***************** 1. row *****************
id: 1
select_type: SIMPLE
table: person
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 1
Extra:
1 row in set (0.00 sec)
id : 表示select 语句的编号; select_type:表示select 语句的类型;
table 表示查询的表 type表示表的链接类型
possible_keys: 表示查询中可能使用的索引
key 表示查询中使用到的索引
key_len: 表示索引的长度
ref 表示使用那个列或常数与索引一起来查询记录
rows 表示查询的行数
Extra 表示查询过程的附件信息。
索引对查询速度的影响:
查询不适用索引,查询语句就会查询所有字段。若有索引就会只查询索引字段。
使用索引会大大提高查询的速度,但查询语句中如果有 like关键字
eg : select * from student where name like ‘%di ‘; 如果like 后第一个字符为%则索引无用。
查询语句中使用多个索引:
eg : create index index_birth on student (birth,department);创建索引;
表中有多个索引时,只有查询条件中使用了这些字段的第一个字段
查询语句中只有OR关键字:
eg: select * from student where name=’zhangsan’ or id =3;
如果or 前后的两个条件都是索引时,查询中将使用索引,如果前后有一个条件不是索引,则查询时不使用索引。
注:优化子查询:子查询在执行时MYSQL会为内层查询语句建立一个临时表,然后外层查询语句在临时表中查询,
查询完后MYSQL会销毁这些临时表,当数据量大时查询速度就会有一定的影响。
一般使用链接查询代替子查询,链接查询不会建立临时表。
优化数据库的结构:
1、将字段很多的表分解为多个表: 即字段很多的表中很多字段都是不经常使用的,
当数据量大时这就会给查询带来影响,可以将他分解为多个表。当需要字段时可以进行
连表查询,得到不经常查看的字段信息。
2、增加中间表:有时需要经常查询两个表中的几个字段。如果经常连表查询,
会降低MYSQL数据库的查询速度,这样可以建立中间表来提高查询速度,
3、增加冗余字段。
优化插入记录的速度:
1、禁用索引:插入记录时MYSQL会对表的索引进行排序,如果插入大量
记录就会降低插入速度,可以插入之前禁用索引,插入完后,再开启索引,
ALTER TABLE 表名 DISABLE KEYS; 禁用索引
ALTER TABLE 表名 ENABLE KEYS; 开启索引。
2、禁用唯一性检查:如果有唯一性限制,可以禁用唯一性效验,等插入后再开启。
SET UNIQUE_CHECKS=0; 禁用
SET UNIQUE_CHECKS=1;开启
3、优化insert语句:
插入多条记录时:使用一个insert语句插入多条记录,这减少了与数据库的
链接等操作,速度较快。,
eg: insert into food valus(“office’,1),(‘茶’,2),(),(),;
多条记录可以综合插入:
start transaction;
insert into …..
insert into
….
commit;
实现操作,再提交。
分析表、检查表、优化表、
1、分析表:ANALYZE TABLE 表名1; 可以分析表
2检查表、CHECK TABLE 表名 【option】;option有5个参数
quick、fast、 changed \medium extended .这5个参数执行效率依次降低
3\优化表,OPTIMIZE TABLE 表名;
可以消除删除和更新造成的磁盘碎片;