MySQL及调优

介绍

MySQL是在开发过程中使用的最多的一个关系型数据库。所以了解和掌握对它的调优是很有必要的。

MySQL数据类型

MySQL的支持哪些数据类型,对应的大小及用途等信息,附上几个表格。

数字
字符
日期
枚举

引擎

MySQL的官方引擎主要有两个:MyISAM和InnoDB。

MyISAM最大的特点是支持全文索引、查询效率较高。缺点是不支持事物、表级锁。

InnoDB是MySQL5.5之后MySQL默认引擎。特点是支持ACID事务、支持外键、支持行级锁提高了并发效率。

有关事务、外键、锁下面会一一介绍。

数据库事务

数据库中事务的特性:ACID,这个也是上面说的InnoDB支持ACID事务。

ACID分别为:原子性、一致性、隔离性、持久性。

原子性:事务的操作要么全部成功要么失败回滚。

一致性:事务不能破坏数据库的一致性和完整性。例如事务操作了多张表,要么多张表全是操作前的数据要么多张表全是操作后的数据。

隔离性:隔离性是针对并发问题,多用户的事务相互隔离。

持久性:事务提交成功后对数据库的修改是永久的。

数据库并发

刚才提到事务的隔离性是针对并发问题的。如果对事务没有进行隔离会出现什么问题呢?先看一张图。

示意图

如果没有进行事务隔离,则将会出现脏读、不可重复度、幻读等情况,分别说明一下。

脏读:事物A读取到了事物B未提交的数据。

不可重复读:事物A多次读区数据库中同一条数据时返回不同的数据。

幻读:事物A执行完全相同的语句时返回结果集不同。与不可重复的区别是不可重复是读区一条数据。幻读是由于增加和删除记录导致的。

不同的事务隔离级别能解决不同的问题,如上图所示。MySQL默认是可重复读级别。

事务分类

事务分为:扁平化事务、带保存点扁平化事务、链事务、嵌套事务、分布式事务。

扁平化事务:要么全部成功,要么全部回滚。这个也是使用最多的。

带保存点扁平化事务:是在事务执行过程中插入保存点,事务失败时回滚到保存点。

链事务:可以回滚到最近的保存点。和带保存点扁平化事务的区别在于带保存点扁平化事务可以回滚到任意保存点。

嵌套事务:事务的嵌套,如果上层事务回滚所有事务回滚。

分布式事务:分布式系统的扁平化事务,这个块内容很多后面可以单独拿出来写一篇。

MySQL锁

上面说过InnoDB是行级锁,MyISAM是表级锁。下面介绍一下几个常见的锁。

行级锁:锁的颗粒度小,并发效率高,可能出现锁死。

表级锁:锁的颗粒度大,并发效率低,无锁死。

共享锁:也叫读锁,就是其他事务可以读就是不能写。上锁语句:lock in share mode。

排他锁:排他锁就是写锁,其他事务不能读取,也不能写。UPDATE、DELETE 和 INSERT 语句,InnoDB 会自动给涉及的数据集加排他锁。上锁语句:select for update

需要说明的是:行级锁和表级锁是锁的颗粒度,而共享锁和排他锁是锁的策略。

外键

InnoDB支持外键,那外键是什么呢?简单介绍一下。

外键:A表保存的B表的主键id。

可能会想,这个不是一直都这样吗?其实不是的一般情况下,外键开发人员知道,但是数据库不知道,现在数据库知道了以后就可以帮我们确保数据的完整性和一致性。比如如果删除主表的那从表自动删除等等。

索引

索引是我们最常用的优化方式,可以大幅提升数据库的查询性能。当然它也有代价,代价就是牺牲磁盘空间以及新增、修改、删除等操作增加额外开销。

索引分为:唯一索引、主键索引、普通索引、联合索引、全文索引

唯一索引:全表唯一,允许未空。

主键索引:全表唯一,不允许未空。

普通索引:允许索引列值相同。

联合索引:是由多个列组成的索引,并不是多个索引组成。联合索引遵循《最左原则》所以选择列时顺序很重要。

全文索引:只能在 CHAR、VARCHAR、TEXT 类型字段上使用,底层使用倒排索引实现。这个慎用,会非常消耗磁盘资源。

MySQL调优

MySQL的调优是经常用到的所有很有必要掌握,大概调优思路如下:

表结构+索引  -> SQL优化  ->MySQL参数优化  ->  硬件及系统配置

当然最有效果的是最右边的方案,但也是成本最高的。

下面罗列一下优化方案:

1.要在设计表结构时,考虑数据库的水平与垂直扩展能力。

2.要选择合适的字段大小及类型。

3.避免一个表子段过多。

4.做适当的反范式,注意适当的。

5.对经常查询的维度要做好索引。

6.列尽量设置为not null,因为MySQL对可以为null的列无法做查询优化,允许未null使得索引统计更加复杂,以及占用更多的空间。

7.通过慢查询日志来针对性的优化。

8.学会使用Explain来分析语句。

9.尽量使用索引排序。

以上是对单库、单表的优化。后面会单独写分区、分表、分裤、读写分离等等。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容