MySql 性能忧化随记

前一段时间接触MySql 服务器,关于查询忧化方面整理,优化主要唯绕几个工具函数 : show profiling  , explain ,  索引 , limit

如果上司抱怨服务器查询太慢,这时候,你可能会说,可能是网络不好,服务器性能太差。给上司一个合理的说法,私底下,是什么原因,心中要有数。从客户端发起http 请求,到服务端后台业务处理,具体到数据库相关。大多数性能问题出现在数据库上。通常会有这样情况,服务器上线之时,性能还不错,半年之后,网站慢的像蜗牛。在这段时间,在大的架构不变情况,变化部份是数据库文件暴增。因此很可能是数据库拖后腿了。

解决办法有许多种:

1.业务重构,简化现有业务。

2.增加数据缓存组件

3.优化现有数据库或表结构

假设现在已经拿到一段sql 语句,如何对这段sql 做常归性能分析呢? MySql 提供一些常用工具。首先 将 sql 语句前加 explain ,  mysql 会打印出查询计划:例如:

explain select * from test limit 1

这里有许多列,具体含义可另行搜索 mysql explain 。 重点部份: type possible_key , key , key_len , ref , rows , extra 。

type 属性:  ALL , INDEX , RANGE , REF , EQ_REF , CONST , 从左往右,表现从差到优。

ALL 表明: 当前查询执行全表扫描, 如果在数据量较大表中执行筛选,  显示全表扫描,表明需要添加索引了。

possible_keys 属性: 例举当前sql 可用索引

key:当前查询实际使用索引 (留意关键字 force index(...)  , ignore index(...))

key_len : 当前使用索引颗粒大小

ref : where 子条件哪些列被索引使用

rows:执行查询过程中,扫描了多少行

extra : 额外做了哪些动作,如 Using temporary , Using index , Using  filesort.

例如: explain select SQL_NO_CACHE * from test where year = 2015 and month = 2  ;

以上示例表明:使用了索引 type: ref  , 其中 possible_keys 枚举了能够使用的索引,key 注明实际使用的索引 , key_len 表明索引长度 10 byte, 该值并不是固定的,本例中使用了复合索引,随着复合索引命中的例数增多,key_len 会变大。 ref : const , const , 表明命中复合索引前两列, 如果是: ref:const , const , const ; key_len 的值是15。

rows: 扫描表的行数 ,  值愈小愈好。 limit 关键字无法影响 rows 大小。

例如: explain select SQL_NO_CACHE  * from test where year = 2015 and month = 2 and date = 20 limit 10

请注意,在末尾加了 limit 10 , 但是 MYSQL 仍然扫描了 136176 行 。

开启 MYSQL 执行耗时统计 :

set profiling = 1 ;

显示最近查询sql  耗时

show profiles ;

显示指定查询详细耗时show profile for query [id]

时间: 2024-10-13 12:28:32

MySql 性能忧化随记的相关文章

sql server 数据库性能忧化

一.数据库设计优化 1.不要使用游标. 使用游标不仅占用内存,而且还用不可思议的方式锁定表,它们可以使DBA所能做的一切性能优化等于没做.游标里每执行一次fetch就等于执行一次select. 2.创建适当的索引 每当为一个表添加一个索引,select会更快,可insert和delete却大大变慢,因为创建了维护索引需要许多额外的工作. (1)采用函数处理的字段不能利用索引 (2)条件内包括了多个本表的字段运算时不能进行索引 3.使用事务 对于一些耗时的操作,使用事务可以达到很好的优化效果. 4

MySQL性能调优与架构设计——第12章 可扩展设计的基本原则

第12章 可扩展设计的基本原则 前言: 随着信息量的飞速增加,硬件设备的发展已经慢慢的无法跟上应用系统对处理能力的要求了.此时,我们如何来解决系统对性能的要求?只有一个办法,那就是通过改造系统的架构体系,提升系统的扩展能力,通过组合多个低处理能力的硬件设备来达到一个高处理能力的系统,也就是说,我们必须进行可扩展设计.可扩展设计是一个非常复杂的系统工程,所涉及的各个方面非常的广泛,技术也较为复杂,可能还会带来很多其他方面的问题.但不管我们如何设计,不管遇到哪些问题,有些原则我们还是必须确保的.本章

MySQL 性能优化的最佳20多条经验分享

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的                    事,而这更是我们程序员需要去关注的事情. 当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语                句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的M

MySQL性能优化的最佳20+条经验

http://www.pythonclub.org/mysql/optimize-20-tips 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存

20多条MySQL 性能优化经验分享

当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了. 这里最主要

MySQL性能优化的21个最佳实践

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被My

MySQL 性能优化---索引及优化

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 一.MySQL性能优化之-影响性能的因素 1.商业需求的影响 Myisam存储引擎内置一个计数器,count(*)时直接从计数器读取:而通过innodb存储引擎查找某个数据时,是必须扫描全表的,所以当执行对表的统计(即使用count(*)函数)时,myisam要比innodb要快的很多.所以一般在innodb上执行count(*)时一般要

Mysql5.7—mysql性能优化-索引、语句、配置(运维必备)

小生博客:http://xsboke.blog.51cto.com 小生 Q Q:1770058260 -------谢谢您的参考,如有疑问,欢迎交流 一. 数据库的类型 1) 第一代数据库: 基于层次模型与网状模型的数据库 层次型数据库比较经典的是IBM公司的IMS(InformationManagement System)数据库,层次型数据库提供了良好的完整性支持,模型简单,对具有一对多层关系的部们描述非常自然.直观,容易理解,比较适用于那些实体间联系是固定的且预先定义好的环境,其性能优于关

mysql性能查看&分析

第一步.检测系统状态 通过系统自带工具检测系统状态,cpu.内存.交换空间.磁盘利用率,还有关注那些占用cpu和内存的进程. sar检测系统是否存在IO问题 yum -y install systat sar -u 2 10    每隔2秒执行一次,共执行10次 [email protected] zones]# sar -u 2 10 Linux 3.10.0-123.el7.x86_64 (cp-mysql04-new) 2016年01月07日 _x86_64_ (8 CPU) 15时03分