旗下导航:搜·么
当前位置:网站首页 > MySQL教程 > 正文

Mysql数据库优化的要领总结(必看)【MySQL教程】,mysql,优化

作者:搜教程发布时间:2019-12-01分类:MySQL教程浏览:50评论:0


导读:本篇文章给人人带来的内容是关于Mysql数据库优化的要领总结,有肯定的参考价值,有须要的朋侪可以参考一下,愿望对你有所协助。学无止境,数据库优化分为各个方面,在这里,我举行...
本篇文章给人人带来的内容是关于Mysql数据库优化的要领总结,有肯定的参考价值,有须要的朋侪可以参考一下,愿望对你有所协助。

学无止境,数据库优化分为各个方面,在这里,我举行了比较全的总结,分享给正在事情或许进修的偕行们。

数据库的优化分为以下七大方面:

1、表的设想要相符三范式恰当的反三范式也可以);

2、增加恰当的索引,索引对查询速率影响很大,必需增加索引(主键索引,唯一索引,一般索引,全文索引);

3、增加恰当存储历程,触发器,事件等;

4、读写星散(主从数据库);

5、对sql语句的一些优化,(查询实行速率比较慢的sql语句);

6、分表分区(分表:把一张大表分红多张表。分区:把一张内外面的分配到差别的地区存储);

7、对mysql服务器硬件的升级操纵。

接下来我将细致解说优化的体式格局。

一、三范式

第一范式:

原子性:内外面的字段不能再支解,只假如关联型数据库,就天然的自动满足第一范式

关联型数据库(有行和列的观点):mysql、sql server、oracle、db2、infomix、sybase、postgresql,在设想时,先有库->表->字段->细致纪录(内容):在存储数据时,要设想字段。

非关联型数据库(泛指nosql数据库):memcache、redis、momgodb等。

第二范式:

一个表中没有完全雷同的纪录,经由过程一个主键即能处置惩罚

第三范式:

表中不能存储冗余数据

反三范式设想:

相册表
ID 相册称号 相册阅读量
1 生活 100
2 事情照 100
照片表
ID 照片称号 相册ID 阅读量
1 我的小狗 1 49
2 我的小猫 1 51
3 我的同事 2 100

假如要算一个相册的阅读量,我们可以在相册表中增加相册阅读量字段,阅读照片的时刻同时更新相册阅读量。

二、开启慢查询

Mysql慢查询默许是封闭的,默许纪录凌驾10秒的sql语句。

1.检察慢查询纪录时候:

show variables like ‘long_query_time’;

2.修正慢查询时候:

set long_query_time=2;

3.经由过程以下的一个函数来举行测试:

benchmark(count,expr)   函数可以测试实行count次expr操纵须要的时候

三、竖立索引

1、主键索引的特性:

(1)一个表中最多只要一个主键索引

(2)一个主键索引可以指向多个列

(3)主键索引的列,不能有反复的值,也不能有null

(4)主键索引的效力高。

2、唯一索引的特性:

(1)一个表中可以有多个唯一索引

(2)一个唯一索引可以指向多个列,

(3)假如在唯一索引上,没有指定not null,则该列可以为空,同时可以有多个null,

(4)唯一索引的效力较高。

3、一般索引:

运用一般索引主假如进步查询效力

4、全文索引

mysql自带的全文索引mysql5.5不支撑中文,支撑英文,同时要求表的存储引擎是myisam。假如愿望支撑中文,有两个计划,

(1)运用aphinx中文版coreseek (来替换全文索引)

(2)插件mysqlcft。

增加索引重要的题目:

(1)较频仍的作为查询前提字段应当建立索引,唯一性太差的字段不适宜零丁建立索引,纵然频仍作为查询前提,更新异常频仍的字段不适宜建立索引

(2)不会出现在WHERE子句中字段不应建立索,索引是由价值的,虽然是查询速率进步了,然则,会影响增该删的效力。而且索引文件会占用空间。

四、分表、分区

垂直分表(内容主表+附加表):

内容主表:存储种种数据的一些大众信息,比方数据的称号,增加时候等,

可以运用多个附加表,附加表存储一些数据的奇特的信息。

重要原因:是内容主内外面的数据接见比较频仍。

特性:表构造差别

水中分表:

将表数据存在差别的表中

特性:表构造雷同

分区:

就是把一个表存储到磁盘差别地区,仍然是一张表。

基础的观点:

(1)Range(局限)–这类情势许可将数据分别差别局限。比方可以将一个表经由过程年份分别红若干个分区。

(2)List(预定义列表)–这类情势许可体系经由过程预定义的列表的值来对数据举行支解。

(3)Hash(哈希)–这中情势许可经由过程对表的一个或多个列的Hash Key举行盘算,末了经由过程这个Hash码差别数值对应的数据地区举行分区。比方可以竖立一个对表主键举行分区的表。

(4)Key(键值)-上面Hash情势的一种延长,这里的Hash Key是MySQL体系发作的。

分区表的限定:

(1)只能对数据表的整型列举行分区,或许数据列可以经由过程分区函数转化成整型列。

(2)最大分区数量不能凌驾1024。

(3)假如含有唯一索引或许主键,则分区列必需包括在所有的唯一索引或许主键在内。

(4)按日期举行分区很异常适宜,由于许多日期函数可以用。然则关于字符串来讲适宜的分区函数不太多。

五、并发处置惩罚的锁机制

锁机制:在实行时,只要一个用户取得锁,其他用户处于壅塞状态,须要守候解锁。

mysql 的锁有以下几种情势:

表级锁:开支小,加锁快,发作锁争执的几率最高,并发度最低。myisam引擎属于这类范例。

行级锁:开支大,加锁慢,发作锁争执的几率最低,并发度也最高。innodb属于这类范例。

表锁的演示:

1.对myisam表的读操纵(加读锁),不会壅塞其他历程对同一表的读要求,但会壅塞对同一表的写要求。只要当读锁开释后,才会实行其他历程的操纵。

2.表增加读锁后,其他历程对该表只能查询操纵,修正时会被壅塞。

3.当前历程,可以实行查询操纵,不能实行修正操纵。不能对没有锁定的表举行操纵。

4.锁表的语法:

lock table 表名 read|write

5.也可以锁定多个表

6.对myisam表的写操纵(加写锁),会壅塞其他历程对锁定表的任何操纵,不能读写,

7.表加写锁后,则只要当前历程对锁定的表,可以实行任何操纵。其他历程的操纵会被壅塞。

行锁的演示:

1.innodb存储引擎是经由过程给索引上的索引项加锁来完成的,这就意味着:只要经由过程索引前提检索数据,innodb才会运用行级锁,不然,innodb运用表锁。

2.开启行锁后,当前历程在针对某条纪录实行操纵时,其他历程不能操纵和当前历程雷同id的纪录。

php内里有文件锁,在现实的项目中多半运用文件锁,由于表锁,会壅塞,当对一些表增加写锁后,其他历程就不能操纵了。如许会壅塞全部网站,会拖慢网站的速率。

相干引荐:

以上就是Mysql数据库优化的要领总结(必看)的细致内容,更多请关注ki4网别的相干文章!

标签:mysql优化


欢迎 发表评论: