MySQL 在5.1以后的版本支持了分区表,从物理的角度上来看分区是将一个表分解成多个独立不相交的子表,但从逻辑的角度来看所有的分区共同组成一个独立的表。MySQL目前只支持水平分区(表的不同行分布在不同的子表中)并不支持垂直分区(表的不同列分布在不同的子表)。分区可以更方便的管理数据,比如:可以通过删除分区来快速的删除某部分数据;可以只扫描少量的几个分区来查询符合条件的结果;不同的分区可以使用不同的物理设备,更高效的利用查询物理设备;避免ext3文件系统中inode锁竞争等等。 对分区表进行搜索时,如果可以根据WHERE条件确定符合条件的数据分布在哪些分区中,那么只需要对这些分区上的索引进行搜索即可,不需要遍历所有的分区,如果符合条件的数据只分布在少数分区时可以极大的提高查询的速度。这就是本文主要介绍的内容:分区剪枝。
尽管咱们是做Java开发的,但是基本的都会和MySQL打交道,并且面试中MySQL的占比都不少,本文来和大家聊聊,关于MySQL的一些开发规范。
分布式事务允许多个独立的事务资源参与到一个全局的事务中,全局事务要求所有参与的事务要么都提交,要么都不提交。XA是一套分布式事务规范,本文所说的XA事务是指基于XA协议的分布式事务。XA协议下,分布式事务通常由一个全局事务管理器,一个或多个局部资源管理器,以及一个应用程序组成: 应用程序(AP):定义事务边界,并指定构成事务的操作 资源管理器(RM):提供对共享资源的访问 事务管理器(TM):为事务分配唯一标识符,监视其进度,并负责事务的提交,回滚和故障恢复 MySQL的XA事务中,MySQL是资源管理器,事务管理器是连接MySQL的客户端。XA的协议主要描述了事务管理器与资源管理器之间的接口
MVCC (Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC是通过数据行的多个版本管理实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之,就是为了查询一些正在被另一个事务更新的行,并且可以看到它们被更新之前的值,这样在做查询的时候就不用等待另一个事务释放锁。 MVCC没有正式的标准,在不同的DBMS中MVCC的实现方式可能是不同的,也不是普遍使用的。本文讲解InnoDB中MVCC的实现机制(MySQL其它的存储引擎并不支持它)。