MySQL面试知识梳理

数据库逻辑框架

MySQL服务器逻辑架构图

整体可分为三部分:

  • 连接和认证:
    每一个客户端请求原则上对应一个线程,5.5版本之后,可以建立连接池来对线程进行管理,使用少量的线程对付服务大量的连接;认证主要包括认证用户名和密码,如果使用过可SSL,则要进行证书认证;再有就是权限认证。
  • 优化和执行:
    该部分会对查询进行解析和优化。
  • 存储引擎:Mysql提供了8中存储引擎可供选择:


    存储引擎特征对比

    使用比较多的两种引擎是MyISAM和InnoDB,两者的区别是:

  • MyISAM使用表级锁,适用于选择密集型和插入密集型的表。
  • InnoDB使用行级锁,支持事务,聚簇索引,适用于更新密集型的表,容灾型更好,支持快速修复。

数据库事务:

在mysql中,每一次数据库操作其实都是放在一个事务里的,如果不显式的调用START TRANSACTIONCOMMIT,则每一条SQL语句即是一个事务,并自动提交,可以通过SHOW VARIABLES LIKE "AUTOCOMMIT";来查看自动提交的开关与否。

可以使用SET AUTOCOMMIT = 0来关闭自动提交,关闭自动提交主要用于非事务性表的操作,该更改会在下一个事务执行时有效。

事务的四大基本特性(ACID):

  • 原子性(atomicity):一个事务被视为一个不可分割的最小单元,整个事务要么全部提交成功,要么全部失败回滚。
  • 一致性(consistency):数据库总是从一个一致性的状态转换到另一个一致性的状态,比如之前的500元再经过转换后加和仍是五百元。
  • 隔离性(isolation):通常来说,一个事务所作的修改再提交前,对其他事务是不可见的,“通常来说”,体现在不同的隔离级别中。
  • 持久性(durability):事务一旦提交,则其所作的修改将永久的保存到数据库中。

事务的隔离级别:

  • READ UNCOMMITED(未提交读):事务中的修改,即使没有提交,对其他事务也是可见的。
  • READ COMMITED(提交读):一个事务开始时,只能看见已提交的事务所作的修改。
  • REPEATABLE READ(可重复度):同一事务中,多次读取同样记录的结果是相同的。
  • SERIALIZABLE(可串行化):最高级别,强制事务串行执行,对读取的每一行数据都加锁,可能导致大量的超时和锁争用的情况,只有在非常需要确保数据的一致性且可以接收没有并发的情况下,才会使用这一隔离级别。
    隔离级别

    mysql默认的隔离级别是可重复读

MVCC:
即多版本并发控制,可以用来防止“幻读”的发生,从而保证同一事务中两次相同查询所得到的结果是一样的,是一种用于解决读-写冲突的无锁并发机制。

其实现原理即是,对表中的每一行数据给定一个版本号,每一次更改操作会使得版本号递增,这样一个事务开启时,拿到的所有数据的版本号都是小于或者等于当前版本号的,即一个快照,同一事务中的查询操作对该同一记录集进行操作,从而解决读-写冲突

OCC:
即乐观并发机制,又叫乐观锁,主要解决写-写冲突的问题。

其实现原理为CAS,即默认是不会发生冲突,但是在事务准备提交的时候,检查以下有没有新的提交出现,如果没有,则直接提交,如果有,则放弃并重试。适用于低数据争用,写冲突比较少的情景。

索引

索引是什么:索引是为了加快查找速度的一种数据结构。

索引的作用:高效查找数据。

索引的结构:MyISAM和InnoDB都是采用B+树作为数据结构。

B+树:
以下是B+树的一个建树过程:(转载)

下面是往B+树中依次插入
6 10 4 14 5 11 15 3 2 12 1 7 8 8 6 3 6 21 5 15 15 6 32 23 45 65 7 8 6 5 4


B+树建树过程

索引实现:
虽说MyISAM与InnoDB的数据结构都是B+树,但是其实现方式缺截然不同:

  • MyISAM
    索引文件与数据文件分开,叶子节点存储的是数据行的内存地址,示意图如下:
    MyISAM索引示意图

    如需要建立辅助索引,以Col2列为例,则辅助索引的叶节点存储的也是数据行的内存地址,示意图如下:
    辅助索引示意图

    MyISAM这种索引的方式也叫非聚簇索引
  • InnoDB
    InnoDB的索引文件就是数据文件,叶子节点存储的就是真实数据,示意图如下:
    InnoDB索引示意图

    若想建立辅助索引,同样以Col2为例,叶子节点存储的是就是主键,这里以英文字符的ASCII码作为比较准则:
    InnoDB辅助索引示意图

    InnoDB的这种索引又叫聚簇索引,所以不建议使用过长的字段作为主键,这样会使得辅助索引变得过大,此外,非单调的字段也不宜作为主键,因为非单调的字段会使得在建树阶段频繁的分裂,十分低效,所以宜使用自增字段作为主键。

什么情况适合建立索引:

  • 表的主键和外键需要建立索引;
  • 数据量超过300的需要建立索引;
  • 经常出现在where字句中的字段;
  • 经常用于连接两张表的列;
  • 经常需要范围查找的列,因为索引已经排序,所以指定的范围是连续的;
  • 经常需要排列的列,理由同上;

索引的缺点:

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

推荐阅读更多精彩内容

  • MySQL技术内幕:InnoDB存储引擎(第2版) 姜承尧 第1章 MySQL体系结构和存储引擎 >> 在上述例子...
    沉默剑士阅读 7,388评论 0 16
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,894评论 2 89
  • MySQL不权威总结 欢迎阅读 本文并非事无巨细的mysql学习资料,而是选择其中重要、困难、易错的部分进行系统地...
    liufxlucky365阅读 2,567评论 0 26
  • Mysql 事务 特征:原子性:不可分割的操作单元,事务中所有操作,要么全部成功;要么撤回到执行事务之前的状态一致...
    时芥蓝阅读 10,982评论 8 77
  • 蚂蚁指着画上的星球说“皮球”,我解释说“不是气球,是星球,这是在宇宙里”,然后准备继续趁机给小家伙普及普及我那点可...
    更好的妮阅读 137评论 0 0