1.MySQL性能优化就是通过合理安排资源,调整系统参数使MySQL运行更快,更节省资源。MySQL性能优化包括优化查询速度、MySQL服务器优化等,原则是减少系统的瓶颈,减少资源的占用,增加系统的反映速度。
2.在MySQL数据库中,我们可以使用show status 语句查询一些MySQL数据库的性能参数。
(1)语法:show status like 'value';
value参数选择:
Connections:连接MySQL服务器的次数;
uptime:服务器上线的时间;
slow_queries:慢查询次数;
com_select:查询操作的次数;
com_insert:插入操作的次数;
com_update:更新操作的次数;
com_delete:删除操作的次数;
说明:查询其他方法的参数直接将value进行替换即可,慢查询次数参数可以结合慢查询日志,找出查询语句,然后针对慢查询语句进行表结构或者查询语句优化;
3.优化查询
MySQL使用ecplian语句和describe语句,用来分析查询语句(explain [extended] select select_options);
(1)使用extends关键字,explain语句将产生附加的信息。select_options是select语句的查询选项,包括from where语句;
例如:explain select *from 表名称;
(2)索引对查询速度的影响
在MySQL中提高性能的一个最有效的方法是对数据库中的表建立合理的索引。如果查询时没有使用索引,查询语句将扫描表中的所有的记录。在数据量大的情况下,这样查询速度会很慢,建立索引,根据索引快速定位到待查询的索引,减少查询的记录。
说明:《1》使用like关键字的查询
在使用like关键字的时候,如果匹配的字符串的第一个关键字为‘%’的时候,索引不会起作用,只有匹配的第一个字符串‘%’不在第一个位置的时候,索引才会起作用;
例如:explain select *from test like name '%s';(没有使用索引);
explain select * from test like name 's%';(使用索引);
《2》使用多列索引的查询语句
一个索引可以包含16个字段,对于多列索引,只有条件中使用建立索引是的第一个字段的时候,索引才会被使用;
1.create index index_id_name on test (id,name); 2.explain select * from test where name=sdc; 说明:上面首先创建的带有id和name的多列索引,后面使用查询语句进行使用到name字段,但是由于name字段是在创建索引是的第二个字段, 所以该语句没有调用索引;
1.create index index_id_name on test (id,name); 2.explain select * from test where id=1; 说明:上面首先创建的带有id和name的多列索引,后面使用查询语句进行使用到id字段,直接调用索引;
《3》使用or关键字的索引;
查询条件中只有or关键字,且or关键字前后的两个条件中的列都是索引时,查询中才使用索引。否则,查询将不在使用索引。
例如:
1.create index index_id_name on test(id,name); 2.explain select * from test where id=1 or name='sdc'; 说明:我们首先创建一个带有id和name字段的索引,当当我们使用带有or查询的 时候,如果想要使用索引,必须后面所带的查询字段为创建索引时的字段;
《4》优化子查询
在MySQL中,可以使用连接查询(join)代替子查询。连接查询不需要建立临时表,其查询速度要比子查询速度要快,如果查询中使用索引的话,性能会更好。
4.优化数据库结构
一个好的数据库设计方案对于数据库的性能常常会起到事半功倍的效果。合理的数据库结构不仅可以是数据库占用更小的磁盘空间,而且能够是查询速度更快。数据库结构的设计,需要考虑数据冗余、查询和更新速度、字段的数据类型是否合理等多方面的内容。
(1)将字段多的表分解成多个表;
对于字段比较多的表,如果有些字段的使用频率很低,可以将这些字段分离出来形成新表。当一个表数据量很大的时候,会由于使用频率低的字段存在而变慢。
(2)增加中间表
对于需要经常联合查询的表,可以建立中间表来提高查询效率。通过建立中间表,把需要经常联合查询的数据插入到中间表中,然后将原来查询的表改变为中间表,提高查询效率。
首先,分析经常联合查询的表中的字段,然后使用这些字段建立一个中间表,并将原来联合查询的表的数据插入到中间表中,最后使用中间表来进行查询。
(3)增加冗余字段
设计数据库的时候应该尽量的遵循范式理论的约束,尽可能的减少荣冗余字段,让数据库的设计看起来精致、优雅。但是合理的加入冗余字段也是可以提高查询速度的,这个根据实际的情况进行添加。
(4)优化插入记录的速度
《1》对于MyISAM引擎的表,常见优化方法如下:
1.禁用索引
语法:alter table table_name disable keys;(禁用索引);
alter table table_name enable keys(启动索引);
2.禁用唯一检查
语法:set unique_checks=0;(禁用唯一检查)
set unique_checks=1;(启动唯一检查)