当时方位:主页 > 新闻中心 > 建站辅导
Mysql数据库优化,进步产品功能责任编辑 :李飞    文章来历 :星翼创想(www.card1388.com)    发布时刻 :2016-05-13    阅览次数:1516

正常状况下,草创公司的流量并不是很大,mysql数据库在未做优化的状况仍然能够满意功能要求,特别是5.6版别后mysql在功能上仍是有了很大进步,所以在初期并没有花精力在此上面。但后来发作的一系列问题仍是阐明mysql功能优化在项目启动时就应该注重起来。下面就呈现问题的原因和需求留意的当地阐明如下:

深圳网站建造

Mysql问题来历

开发人员之前大都运用oracle,由于oracle强壮的功能和所做项目多是内部企业运用,不太可能呈现功能问题。在这样的布景下,开发人员仍然依照本来的方法来写代码,导致后来功能问题,总结有以下几点:

1.sql多表联合查询,常常是3,4张表联合查询

2.sql中运用很多函数

3.sql中直接select *

4.表字段短少索引或许索引方法不对

5.表规划考虑不周,呈现很多空字段

6.表主键规划成UUID,由于运用传统机械硬盘,对寻址十分晦气

7.过多运用触发器

8.sql中存在杂乱核算

Mysql功能优化决计划

首要经过慢日志过滤出大于1s的sql句子,处理mysql功能问题,一定要运用好慢日志。然后经过执行计划(explain)来检查sql的执行状况。详细优化办法如下:

联合查询分拆成单表查询

假如此sql是联合查询,首要承认是否是能够拆分成单表查询,然后经过程序来进行处理数据。最多不能超过两表联合查询。

树立适宜索引

经过执行计划,对全表扫描的查询一定要树立索引,在树立索引时,一定要考虑到此字段是否有很多空字段,字段值是否很多重复,可区分度是否高,否则树立索引的含义不大,反而是影响insert 和 delete操作。关于长字符类型的字段,添加算因时,需求添加前缀,核算方法为:select count(distinct left(b,5)) /count(distinct b) as left5,count(distinct left(b,6))/count(distinct b) as left6 from test_unique limit 1,其间5,6是预估值,关于UUID这样长字符类型,一般前缀是6.添加索引时sql句子为:alter table test.test_unique add key (left(6));。 关于不能重复的字段,主张运用仅有索引,一是确保刺进值仅有,二是进步查询速度 。 在where、order 、group by后边的字段,尽量树立索引,经过需求留意的是假如where后边是多字段,那么需求树立联合索引,而不是单个树立索引,而且需求留意联合索引的次序,例如where a='x' and b = 'y',在其它sql中呈现where b=‘z’这样的状况,那么联合索引次序为(b,a),而不是独自树立(a,b)和(b)两个索引,由于在树立联合索引(b,a)时,mysql会树立两个索引(b),(b,a)两个索引。

防止索引失效

在字段上运用函数将会使索引失效,因而一定要防止在左边字段运用函数,而是提早在程序里处理好。

尽量防止函数

mysql供给了很多的函数,但关于这些函数,尽量不要用,而是在程序里进行处理,现在mysql关于这些函数优化作业做的并不是很好,往往有时候会导致严峻的功能问题。

表主键运用自增序列

表主键尽量选用自增序列,这样能够充沛mysql的存储特性,mysql选用B+树存储。需求留意的当地在于:假如是分库分表,那么需求不能直接运用自增序列,需求选用其他方法来完结,常用的方法经过redis来保护一套ID。


文章转载请保存网址:http://www.card1388.com/news/faq/1671.html