如何对数据库响应变慢进行优化

来源:互联网 发布:中美贸易顺差数据 编辑:程序博客网 时间:2024/04/24 07:57
1)show status(show session status like '%字符串%')来查看最近服务器都在处理什么内容,是以查询还是以更新为主
得到信息包括:
 访问最多的数据
执行的最多的查询种类
停留时间最长的状态
用来执行查询使用的最频繁的子系统
查询过程中访问的数据种类
执行了多少种不同类型的活动,比如索引扫描
2)根据explain执行查看你本次执行的查询语句的各个部分的特点
3)EXPLAIN结果中字段的意义:
1,key列指出优化器使用的索引,一般来说SQL查询中每个表仅使用一个索引,也错在索引合并的少数例外
2,rows提供了试图分析所有存在于累计结果集中航数目的mysql优化器的估计值,QEP(查询执行计划)很容易描述这个很困难的统计量
3,possible_keys列出优化器为查询选定的索引。一个会列出大量可能索引的QEP意味着备选索引数量太多,同时也可能存在无效的单列索引
4,key_len用于SQL语句的连接条件的键的长度,此列值对于确认索引的有效性以及多列索引中用到的列的数目很重要
key_len: 4 // INT NOT NULL
 key_len: 5 // INT NULL
 key_len: 30 // CHAR(30) NOT NULL
 key_len: 32 // VARCHAR(30) NOT NULL
 key_len: 92 // VARCHAR(30) NULL CHARSET=utf8
是否可以为空、可变长度的列以及key_len 列的值只和用在连接和WHERE 条件中的索引的列
 有关。索引中的其他列会在ORDER BY 或者GROUP BY 语句中被用到
5,table是输出结果中一个单独行的唯一标识符,这个值可能是表名、表的别名或者为查询产生的临时表
6,select_type,列出了各种标识table列引用的使用方式类型,最常见的值包括SIMPLE、PRIMARY、DERIVED 和UNION
7, partitions 列代表给定表所使用的分区。这一列只会在EXPLAIN
  PARTITIONS 语句中出现。
8,Extra 列提供了有关不同种类的MySQL 优化器路径的一系列
 额外信息。
9,type 列代表QEP 中指定的表使用的连接方式
4)根据explain的结果,来确定是否需要对数据表进行索引创建修改删除的操作,索引的使用:
1,如果mysql估计使用索引比全表扫描慢,则不适用索引,比如使用了<或者>操作
2,查询条件中使用了函数或者索引字段时表达式的一部分则不会使用索引
3,使用or分割条件,如果or前的条件中列有索引,后面的列中没有索引,那么涉及到的索引都不会使用
4,如果创建复合索引,如果条件中使用的列不是索引的第一部分(前缀索引)
5,比较操作符LIKE和REGEXP的搜索模板的第一个字符是通配符,如like的%like,则不会使用索引
6,对where后边条件为字符串的一定要加上引号,字符串如果为数字,mysql会自动转为字符串,但是使用索引
0 0