摘要:
假设字段k上的值都不重复,在k上选择唯一索引还是普通索引? 先从这两种索引对查询语句和更新语句的性能影响来进行分析。 查询过程 对于普通索引来说,查找到满足条件的第一个记录 (5,500) 后,需要查找下一个记录,直到碰到第一个不满足 k=5 条件的记录。 对于唯一索引来说,由于索引定义了唯一性,查 阅读全文
摘要:
如下示例中,事务 B 查到的 k 的值是 3,而事务 A 查到的 k 的值是 1。为什么? mysql> CREATE TABLE `t` ( `id` int(11) NOT NULL, `k` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=I 阅读全文
摘要:
MySQL 的行锁是在引擎层由各个引擎自己实现的。 MyISAM 引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁。 定义:行锁就是针对数据表中行记录的锁。 两阶段锁 两阶段锁的定义:在 InnoDB 事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。 阅读全文
摘要:
根据加锁的范围,MySQL 里面的锁大致可以分成全局锁、表级锁和行锁三类。 全局锁 全局锁的定义:就是对整个数据库实例加锁。 全局锁的典型使用场景:做全库逻辑备份。 业务的更新不只是增删改数据(DML),还有可能是加字段等修改表结构的操作(DDL)。不论是哪种方法,一个库被全局锁上以后,你要对里面任 阅读全文
摘要:
在下面这个表 T 中,如果我执行 select * from T where k between 3 and 5,需要执行几次树的搜索操作,会扫描多少行? 下面是这个表的初始化语句。 mysql> create table T ( ID int primary key, k int NOT NULL 阅读全文
摘要:
为什么会有索引?索引是什么? 索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。 索引的常见模型 哈希表 哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的键即 key,就可以找到其对应的值即 Value。适用于只有等值查询的场景,比如 Memcached 阅读全文