MySQL性能优化就是通过合理安排资源,调整系统参数使MySQL运行的更快,更节省资源
1.优化简介
- 找出系统的瓶颈,提高MySQL数据库整体的性能
- 合理的结构设计和参数调整,以提高用户操作响应的速度
- 尽可能的节省系统资源,以便系统可以提供更大负荷的服务
使用SHOW STATUS语句查询一些MySQL数据库的性能参数
SHOW STATUS LIKE 'value';
其中,value是要查询的参数值,一些常用的性能参数如下:
- Connections:连接MySQL服务器的次数
- Uptime: MySQL服务器的上线时间
- Slow_queries:慢查询的次数
- Com_select:查询操作的次数
- Com_insert:插入操作的次数
- Com_update:更新操作的次数
- Com_delete:删除操作的次数
例子:
SHOW STATUS LIKE 'Connections';
1.优化查询
查询是数据库中最平方的操作,提高查询速度可以有效地提高MySQL数据库的性能
1.分析查询语句
EXPLAIN [EXTENDED] SELETE select_options
例子:
- id: SELECT标识符;这是SELECT的查询序列号
- select_type:表示SELECT语句的类型;它可以是以下几种取值:
- SIMPLE:表示简单查询,其中不包括连接查询和子查询
- PRIMARY:表示主查询,或者是最外层的查询语句
- UNION:表示连接查询的第2个活后面的查询语句
- DEPENDENT UNION:连接查询中的第2个或后面的SELECT语句,取决于外面的查询
- UNION RESULT:连接查询的结果
- SUBQUERY,子查询中的第一个SELECT语句
- DEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询;
- DERIVED:导出表的SELECT(FROM子句的子查询)
- table:表示查询的表
- type:表示表的连接类型;下面按照从最佳类型到最差类型的顺利给出各种连接类型:
- system:该表是仅有一行的系统表;这是const连接类型的一个特例
- const:数据表最多只有一个匹配行,它将在数据查询开始时被读取,并在余下的查询中优化中作为常量对待;const表查询速度很快,因为他们只读取一次;const用于使用常数值比较PRIMARY KEY或者UNIQUE索引的所有部分的场合
- eq_ref:对于每个来自前面的表的行组合,从该表中读取一行;当一个索引的左右部分都在查询中使用索引时UNIQUE或PRIMARY KEY时,即可使用这种类型;eq_ref可以用于"="操作符比较带索引的列;比较值可以为常量或一个在该表前面所读取的表的列的表达式
- re
- ...太多了,需要的时候在慢慢看吧
- possible_keys:指出MySQL在使用哪个索引在该表中找到行,如果该列时NULL,则没有相关的索引;在这种情况下,可以通过where子句看它是否引用某些列或适合索引的列来提高查询性能.如果是这样,可以创建合适的索引来提高查询的性能
- key:表示查询实际使用到的索引,如果没有选择索引,该列的值是nuLL;想要强制MySQL使用或忽视possible_key列中的所有,在查询中使用FORCE INDEX,USE INDEX或者IGNORE INDEX;参见SELECT语法
- key_len:表示MySQL选择的索引字段按字节计算的长度,如果键是NULL,则长度是NULL,注意通过key_len值可以确定MySQL将实际使用一个多列索引中的几个字段
- ref:表示使用哪个列或常数与索引一起来查询记录
- rows:显示MySQL在表中进行查询视必须检查的行数
- Extra:表示MySQL在处理查询时的详细信息
DESCRIBE语句的使用方法与EXPLAIN语句是一样的,并且分析结果也是一样的;DESCRIBE可以缩写为DESC
DESCRIBE SELECT select_options
2.索引对查询速度的影响
- MySQL中提高性能的一个最有效的方式就是对数据表设计合理的索引
- 索引提供了高效的范文数据的方法,并且加快查询的速度,英雌,索引对查询的速度有着至关重要的影响
- 使用索引可以快速的定位表中的某条记录,从而提高数据库的查询速度,提高数据库的性能
例子:
3.使用索引查询
使用索引有几种特殊情况,在这些情况下,有可能使用带有索引的字段查询时,索引并没有起作用
- 使用LIKE关键字的查询语句
- 再使用LIKE关键字进行查询的查询语句中,如果匹配字符串的第一个字符为"%",索引不会其作用
- 只有"%"不在第一个位置,索引才会起作用
例子: