mysql进阶知识点汇总

mysql引擎

1
2
3
4
5
水平分表:当一个表的数据太大时效率大大降低,水平分表就是将整个大表拆成不同的小表,每一次查询会判断数据在哪个表中,每一次查询会判断在那个表中,然后对应去查找,提高效率
垂直分表:当表中某些字段不常用的时候可以把不常用的字段切到宁一个表中,然后建立关联关系
innodb:最常用的引擎,支持事务,行锁,外键等
MyISAM:存储效率高,支持分表
Memory:速度快

mysql锁机制

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
锁原理:锁是计算机协调多个进程或线程并发访问某一资源的机制
分类: 一.对数据操作的类型划分为读锁和写锁
·读锁(共享锁):针对同一份数据,多个读操作可以同时进行而不会相互影响
·写锁(排它锁):当前写操作没完成时会阻断其他写锁和读锁
总:读锁会阻塞写,但是不会阻塞读。而写锁则会把读和写都阻塞
二.对数据操作粒度划分为表锁、行锁和页锁
·Mysiam、memory支持表锁,innodb既支持表锁也支持行锁,innodb与mysiam的最大区别一个是支持事务,宁一个就是支持行锁
三种锁的区别
表锁:开销小,加锁快,不会出现死锁,发生锁冲突的概率最高,并发度最低
行锁:开销大,加锁慢,会出现死锁,发生锁冲突的概率最低,并发度最高
页锁:开销介于表和行锁之间,会出现死锁,并发度一般
mysql行锁变表锁,Innodb只有在通过索引条件检索数据时使用行级锁,否则使用表锁
总结:Innodb的行锁是针对索引加的锁,不是针对记录加的锁.并且该索引不会失效,否则都会从行锁升级为表锁.
表锁加锁方式:自动加锁,查询操作,会自动给涉及的所有表加读锁,更新操作(update,delete,insert),会自动给涉及的表加锁
行锁加锁方式:自动加锁,对于update,delete和insert,innodb会自动给涉及数据集加排它锁,对于普通select语句,Innodb不会加任何锁,当然我们也可以显示的加锁
表锁读锁会阻塞写但不会阻塞读,而写锁则会把读写都阻塞

mysql的索引

1
2
3
4
5
6
7
mysql中索引的存储类型有两种BTREE和HASH,也就是用树或者hash值来存储该字段
Myisam和InnoDB引擎只支持BTREE索引
Memory 支持HASH和BTREE索引
分类(常用):
·单列索引:只有一列的索引,
·组合索引:在表中的多个字段组合上创建的索引(最左前缀原则)
·全文索引:只在myisam引擎上才能使用