码迷,mamicode.com
首页 > 数据库 > 详细

MySQL优化

时间:2015-11-09 00:16:04      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:mysql   优化   

1.优先使用join联表查询,而不是子查询

原因:过多的子查询会使效率下降。

2.当join联表查询时,过滤条件优先使用on,之后无法使用on的,再使用where进行过滤

原因:MySQL使用join联表时,首先处理on中的过滤条件,然后再处理where中的过滤条件,将过滤条件优先放在on后,可以时筛选出的集合尽可能小,提高效率。

3.确认查询结果只有一条时,使用limit 1

原因:如果不使用limit 1,select检索到第一条匹配信息后,仍然对后边的数据继续检索,使用limit 1 可以避免查找到结果后不必要的继续查找,提高性能。

4.不要使用order by rand()

原因:效率太低,可以先使用select count(*) from table;获取总条数n,在n~0之间获取随机值,使用limit n-1,1;的方式获取随机数据,效率明显高于order by rand()

5.使用Explain查看select的情况。其中type字段显示连接使用了何种类型,从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL;

6.select * from tableName procedure analyse();根据表中数据分析各字段使用情况进行建议优化。由于是根据表中现有数据分析,所以procedure analyse()是基于数据量足够大且查询远大于插入的后期优化

7.使用“垂直分割”的方式,将表分为定长(字段长度确定:表中没有如下类型的字段:  VARCHAR,TEXT,BLOB)和不定长的两张表

原因:对应定长表的查询时的偏移量方便技术,所以速度快,但是如果定长表和不定长表需要经常联表,则不建议分表,毕竟联表查询效率不如单表查询


参考:http://database.51cto.com/art/201108/282615_all.htm

本文出自 “塞上名猪” 博客,请务必保留此出处http://zuohao1990.blog.51cto.com/6057850/1710726

MySQL优化

标签:mysql   优化   

原文地址:http://zuohao1990.blog.51cto.com/6057850/1710726

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!