1、普通索引:最基本的索引,没有任何约束。 2、唯一索引:与普通索引类似,但具有唯一性约束。 3、主键索引:特殊的唯一索引,不允许有空值。 4、复合索引:将多个列组合在一起创建索引,可以覆盖多个列。 5、外键索引:只有InnoDB类型的表才可以使用外键索引,保证数据的一致性、完整性和实现级联操作。 6、全文索引:MyS...
1、锁分类 1、表锁 2、行锁 2、InnoDB和MyISAM的最大不同有两点: 3、事物的ACID特性: 4、并发事务处理带来的问题 5、事务隔离级别 6、MVCC多版本控制机制 7、MVCC版本控制的原理: 8、优化建议 概述 本文主要从数据结构的角度去分析mysql底层索引的数据结构,分析几种数据结构的优劣,介绍锁分类和事物隔离机制。
优先选择联合索引而不是单列索引,避免回表 长字段建前缀索引 MVCC 三个部分:三个隐藏字段(transaction ID、roll ptr, row_id*), undolog版本链、readview四个字段(当前活跃事务ID集合、最小活动事务ID、预分配事务ID、创建当前readview的事务ID) 锁 三中锁:全局锁、表锁、行锁 共享锁和排他锁: 共享锁和共享...
1、普通索引:最基本的索引,没有任何约束。 2、唯一索引:与普通索引类似,但具有唯一性约束。 3、主键索引:特殊的唯一索引,不允许有空值。 4、复合索引:将多个列组合在一起创建索引,可以覆盖多个列。 5、外键索引:只有InnoDB类型的表才可以使用外键索引,保证数据的一致性、完整性和实现级联操作。 6、全文索引:MyS...
2. 锁机制 1. MyISAM 和 Memory 存储引擎使用的是表级锁,BDB 引擎使用的是页级锁,也支持表级锁。由于 BDB 引擎基本已经成为历史,因此就不再介绍了。 2. InnoDB 存储引擎既支持行级锁,也支持表级锁,默认情况下使用行级锁。 3. 所谓表级锁,它直接锁住的是一个表,开销小,加锁快,不会出现死锁的情况,锁...
1.3 锁分类 MySQL的锁机制与索引机制类似,都是由存储引擎负责实现的,这也就意味着不同的存储引擎,支持的锁也并不同,这里是指不同的引擎实现的锁粒度不同。但除开从锁粒度来划分锁之外,其实锁也可以从其他的维度来划分,因此也会造出很多关于锁的名词,下面先简单梳理一下MySQL的锁体系: ...
一致性:指的是事务开始之前和事务结束之后,数据库的完整性限制未被破坏。一致性包括两方面的内容,分别是约束一致性和数据一致性。约束一致性:创建表结构时所指定的外键、Check、唯一索引等约束,可惜在 MySQL 中不支持Check 。数据一致性:是一个综合性的规定,因为它是由原子性、持久性、隔离性共同保证的结果,...
而行级锁则更适合于有大量按索引条件并发更新少量不同数据,同时又有并查询的应用,如一些在线事务处理(OLTP)系统。 MyISAM 表锁 MyISAM 存储引擎只支持表锁,这也是MySQL开始几个版本中唯一支持的锁类型。 如何加表锁 MyISAM 在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE...
行锁 共享锁(Shared Locks): 又称为读锁,简称s锁,顾名思义共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能写,不然容易造成死锁。 加锁方式:在select语句后加LOCK IN SHARE MODE; 释锁方式:commit / rollback 排他锁(Exclusive Locks): ...
1.2 InnoDB 锁的类型 InnoDB 存储引擎实现了如下两种标准的行级锁: 1、共享锁(S Lock),允许事务读一行数据。但不能修改,增加,删除数据。 2、排他锁 (X Lock),获准排他锁的事务既能读数据,又能修改数据。 如果一个事务 t1 已近获得了行 r 的共享锁,那么另外的事务 t2 可以获得行 r 的共享锁,因为读取...