mysql基础知识

MySQL客户端与服务端的通信方式是“半双工”

全双工:双向通信,发送同时也可以接收

半双工:双向通信,同时只能发送或者接收,无法同时操作

单工:单向通信

通信状态查询 show processlist

查询缓存

工作原理:

缓存select操作的结果集合SQL语句

新的select语句,先去查询缓存,判断是否存在可用的记录集

存储引擎

1、Active存储引擎(压缩协议进行数据的存储);

特点:只支持insert和select两种操作;只允许自增id列建立索引;行级锁;不支持事务;数据占用磁盘少

2、MyISAM;3、Innodb;4、Memory存储引擎

一、MyIsam和innodb的对比

1、MyISAM不支持事务,Innodb是事务型存储引擎。

2、MyISAM只支持表级锁,Innodb默认支持行级锁

3、MyISAM不支持外键,Innodb支持外键

4、MyISAM支持全文索引,Innodb不支持

5、MyISAM引擎的查询、更新、插入的效率都比innodb高

总结:在读多少写的应用中还是Innodb插入性能更稳定,如果对比读取速度要求比较快的选MyISAM

附加:

1、MyISAM属于堆表,在磁盘上有三个文件 .frm,.MYI(存放索引),.MYD(存放数据),支持三种不同的存储方式:静态表、动态表、压缩表

2、Innodb属于索引组织表,支持两种存储方式:共享表空间存储和多表空间存储。

3、关于自动增长:MyISAM引擎的自动增长列必须是索引,如果是组合索引,自动增长列可以不是第一列;

Innodb引擎的自动增长列必须是索引,如果是组合索引,自动增长列必须是组合索引的第一列

4、关于主键:MyISAM可以没有主键和自动索引,MyISAM的索引都是保存行地址

    Innodb引擎如果没有设置主键或者非空的唯一索引,就会自动生成一个6个字节的主键(用户不可见)

5、关于count函数,如果没有where条件,MyISAM保存表的总行数,直接取就行

Innodb需要遍历整个表,如果有where条件,处理方式一样

二、事务

1、事务的ACID属性

原子性、隔离性、持久性、最终一致性

2、并发事务带来的几个问题

更新丢失、脏读、不可重复读、幻读

3、事务的隔离级别

读未提交、读已提交、可重复读(默认)、序列化

三、锁

共享锁、排他锁、意向共享锁(表锁)、意向排他锁(表锁)、间隙锁、临键锁、记录锁、死锁

1、mysql死锁怎么避免?怎么解决?

避免死锁

1.1、类似的业务逻辑以固定的顺序访问表和行

1.2、大事务拆小

1.3、同一个事务中,尽可能一次锁定锁需要的所有资源

1.4、为表添加合理是索引,避免表锁

MySQL有两种死锁处理方式:

等待,直到超时(innodb_lock_wait_timeout=50s)。

发起死锁检测,主动回滚一条事务,让其他事务继续执行(innodb_deadlock_detect=on)。

由于性能原因,一般都是使用死锁检测来进行处理死锁。

2、innodb 如果没加索引,写操作会加表锁;如果加了所有,只加行锁和间隙锁

3、死锁的条件

3.1)互斥条件

3.2)不可抢占条件

3.3)循环等待条件

4、乐观锁和悲观锁

4.1)悲观锁:一锁二查三更新,需要数据库本身提供支持 select 。。。 for update来实现

4.2)乐观锁:一般是逻辑上实现,不需要数据库本身提供支持,一般的做法是在需要的数据上增加一个版本号或者时间戳。

四、索引

正确的创建合适的索引,是提升mysql数据查询性能的基础。

索引是为了加速对表中数据行的检索而创建的一种分散的数据结构。

1、种类:

主键索引:数据记录里面不能有null,数据内容不能重复,在一张表里面不能有多个主键索引。

唯一索引:字段数据是唯一的

组合索引:多个列建立索引

普通索引:使用字段关键字建立的索引,主要是提高查询速度

全文索引:只有MyISAM支持

2、结构:B+Tree索引、Hash索引、全文索引(只有MyISAM支持)、RTree

备注:hash索引:由于hash的唯一及类似键值对的形式很适合做索引,可以一次定位,但是对于范围查询、排序、组合索引,效率不高

3、索引的优缺点:

优点

3.1、索引能极大的减少存储引擎需要扫描的数据量

3.2、索引可以把随机IO变为顺序IO

3.3、索引可以帮助我们在分组,排序等操作时,避免使用临时表

缺点

3.1)提高了查询速度,但是降低了表的更新速度,因为更新表的时候,不仅要更新下数据,还有更新下索引文件

3.2)建立索引文件会占用磁盘空间,一般情况不严重。但是在一个大表上建立多种组合索引,索引文件会增长很快。

4、索引失效

4.1)如果条件中有or,即使其中有条件带索引也不会使用,除非全都都是索引

4.2)对于组合索引,如果不满足最左匹配原则,不使用索引

4.3)like查询以%开头,不使用索引,如果离散度低,也不走索引

4.4)如果列是字符串类型,那一定要在条件中将数据用引号引用起来,否者不使用索引

4.5)查询的数量是大表的大部分,应该是30%以上

4.6)对索引列进行运算

4.7)mysql使用不等于,无法使用索引

4.8)mysql中使用is not null 或 is null。

五、基础理论

1、三范式

1.1)建表时要保证列的原子性(不可分割)

1.2)数据库表中的每个实例或记录必须可以被唯一的区分

1.3)一个关系中不包含已在其他关系已包含的非关键字信息

2、drop、delete、truncate的区别和在什么场景下使用

2.1)drop

属于DDL;不可回滚;不可带where;删除表结构和内容;删除速度快

2.2)truncate

属于DDL,不可回滚;不可带where;删除表内容;删除速度快

2.3)delete

属于DML,可回滚;可带where,删除表内容,删除速度慢,需要逐行删除

3、为什么选择B+Tree作为索引结构

3.1)B+树扫库、表能力更强

3.2)B+书的磁盘读写能力更强

3.3)B+树的排序能力更强

3.4)B+树的查询效率更稳定

六、MVCC 多版本并发控制

避免写操作的阻塞,从而引发读操作的并发问题

1、mysql表中会默认加两列:数据行版本号、删除版本号;有个全局事务ID

2、查询的规则

2.1、查询数据行版本号早于当前事务版本的数据行

2.2、查询删除行版本号要么为null,要么大于当前事务版本号的记录

七、undo Log 和redo Log

1、undo log:是为了实现事务的原子性而出现的产物

快照读(普通的select就是快照读)、当前读(SQL读取的数据是最新版本,一般在修改数据的情况下)

2、redo log:是为了实现事务的持久性而产生的产物

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

推荐阅读更多精彩内容

  • 抱着我的小乌龟,左翻翻右翻翻还是睡不着!
    水淼淼wo阅读 121评论 0 0
  • 每当我清醒的时候,我就会觉得我拥有了全世界、我好幸福、我终于可以吸一口新鲜的空气了。哪怕我清楚地记得之前它是如此折...
    MissMay_阅读 172评论 0 1
  • 各位家长们,大家好!本班为临海潮童星T台11班,本班一共40课时/20次课,目前为止已上18课时/9次课。请假的宝...
    CTKIDSTAR蔡老师阅读 724评论 0 0
  • 年底元旦三天小假期,去个千山万水的地太远,推荐一个你家附近的休闲度假地给你参考。 其实就是家附近的——澡堂子,此澡...
    带乐姐阅读 441评论 0 0