Mysql性能优化方法的总结

写在前面:
结合自己和前辈的开发经验,对mysql性能优化方法做了一个简单的梳理和总结!

Mysql性能优化主要从三个方面考虑:
一、优化MySQL所在服务器内核(此优化一般由运维人员完成)。
二、对MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进行参数调整。
三、对SQL语句以及表优化。

服务器内核就不写了,主要针对第二第三点总结一下:

二、MySQL参数优化方式:
1:MySQL 默认的最大连接数为 100,可以在 mysql 客户端使用以下命令查看
mysql> show variables like ‘max_connections’;
2:查看当前访问Mysql的线程
mysql> show processlist;
3:设置最大连接数
mysql>set globle max_connections = 5000;
最大可设置16384,超过没用
4:查看当前被使用的connections
mysql>show globle status like ‘max_user_connections’

三、对MySQL语句性能优化的16条经验:
1、为查询缓存优化查询
2、 EXPLAIN 我们的SELECT查询(可以查看执行的行数)
3、 当只要一行数据时使用LIMIT 1
4、 为搜索字段建立索引
5、 在Join表的时候使用相当类型的列,并将其索引
6、 千万不要 ORDER BY RAND ()
7、 避免SELECT *
8、 永远为每张表设置一个ID
9、 可以使用ENUM 而不要VARCHAR
10、 尽可能的使用NOT NULL
11、固定长度的表会更快
12、垂直分割
13、 拆分打的DELETE或INSERT语句
14、 越小的列会越快
15、 选择正确的存储引擎
16、小心 “永久链接”
具体描述如下:
(一) 使用查询缓存优化查询
大多数的MySQL服务器都开启了查询缓存。当有很多相同的查询被执行了多次的时候,这些查询结果会被放入一个缓存中,这样后续的相同查询就不用操作而直接访问缓存结果了。
这里最主要的问题是,对于我们程序员来说,这个事情是很容易被忽略的。因为我们某些查询语句会让MySQL不使用缓存,示例如下:
1:SELECT username FROM user WHERE signup_date >= CURDATE()
2:SELECT username FROM user WHERE signup_date >= '2014-06-24‘
上面两条SQL语句的差别就是 CURDATE() ,MySQL的查询缓存对这个函数不起作用。所以,像 NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会开启查询缓存,因为这些函数的返回是会不定的易变的。所以,你所需要的就是用一个变量来代替MySQL的函数,从而开启缓存。

(二) 使用EXPLAIN关键字检测查询
使用EXPLAIN关键字可以使我们知道MySQL是如何处理SQL语句的,这样可以帮助我们分析我们的查询语句或是表结构的性能瓶颈;EXPLAIN的查询结果还会告诉我们索引主键是如何被利用的,数据表是如何被被搜索或排序的…等等。
EXPLAIN语句的基本语法如下:EXPLAIN [EXTENDED] SELECT select_options;
使用EXTENED关键字,EXPLAIN语句将产生附加信息。select_options是select语句的查询选项,包括from where子句等等。执行该语句,可以分析EXPLAIN后面的select语句的执行情况,并且能够分析出所查询的表的一些特征。例如:EXPLAIN SELECT * FROM user; 查询结果进行解释说明:
控制台EXPLAIN函数后的各个字段解释
a、id:select识别符,这是select的查询序列号。
b、select_type:标识select语句的类型。
它可以是以下几种取值:
b1、SIMPLE(simple)表示简单查询,其中不包括连接查询和子查询。13 b2、PRIMARY(primary)表示主查询,或者是最外层的查询语句。14
b3、UNION(union)表示连接查询的第2个或者后面的查询语句。
b4、DEPENDENT UNION(dependent union)连接查询中的第2个或者后面的 select语句。取决于外面的查询。
b5、UNION RESULT(union result)连接查询的结果。
b6、SUBQUERY(subquery)子查询的第1个select语句。
b7、DEPENDENT SUBQUERY(dependent subquery)子查询的第1个select, 取决于外面的查询。
b8、DERIVED(derived)导出表的SELECT(FROM子句的子查询)。

c、type:表示表的连接类型。type:表示查询的表
下面按照从最佳类型到最差类型的顺序给出各种连接类型。
c1、system,该表是仅有一行的系统表。这是const连接类型的一个特例。
c2、const,数据表最多只有一个匹配行,它将在查询开始时被读取,并在余下的查询优化中作为常量对待。const表查询速度很快࿰

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值