随笔分类 - MySql进阶
摘要:InnoDB存储引擎存储了对于XA事务的支持,并通过XA事务来支持分布式事务的实现。 1.什么是分布式事务? 分布式事务是指允许多个独立的事务资源(transactional resources)参与到一个全局事务的事务中,其中独立的事务资源可以理解为不同的数据库。 全局事务要求在其中所有参与的事务
阅读全文
摘要:ANSI SQL标准定义的四个隔离级别分别为: READ UNCOMMITTED 读未提交:就是不同事务之间可以对数据是完全相互可见的,事务B可以见到事务A对某张表做的任何操作,在这种隔离性下的安全性非常低。 READ COMMITTED 读已提交:事务A只能看到事务B提交后的操作。这种隔离级别下的
阅读全文
摘要:在MySQL默认命令行设置下,事务都是自动提交的,这就意味着单独执行SQL后就会马上执行提交操作。 如果我们要取消自动提交,我们可以采用两种方式: 1).关闭自动提交设置 在 MySQL 中,可以使用 SET autocommit 语句设置事务的自动提交模式,语法格式如下: SET autocomm
阅读全文
摘要:我们都知道,事务是个好东西,好东西就会发展,发展就会壮大。 随着事务的发展,事务的用法也分为几大类:扁平事务,带有保存点的事务,链事务,嵌套事务以及分布式事务等。 下面对这几类事务进行学习 1.扁平事务 1)什么是扁平事务? 扁平事务是最简单的事务,此类事务的所有操作都在同一层次上(同一数据库,同一
阅读全文
摘要:1.什么是事务? 从书上看:事务可由一条非常简单的SQL语句,也可以有一组复杂的SQL语句组成。 简单说,事务就是SQL的集合。 也许你会问:事务就是SQL的集合吗? 那它有一个sql脚本有什么区别? 这里就涉及到事务的一个重要特性了:原子性。一个事务要么全部执行,要么全部不执行,不存在执行一部分,
阅读全文
摘要:1.何为子分区? 子分区顾名思义,就是在分区中再创建分区,达到对数据的细腻化操作。 MySQL数据库中允许在RANGE和LIST的分区上再进行HASH分区或KEY分区。 2.实例学习 运行下面语句: CREATE TABLE ts( a int, b date ) partition by rang
阅读全文
摘要:1.何为HASH分区? 故名思意,就是将列值通过特定的HASH函数计算后的值划分分区,HASH分区的目的是将数据均匀的分布到预先定义的各个分区中,保证数据均匀分布。 我们要做的是基于将要被散列的列值指定一个列值或表达式,以及指定被分区的表将要被分割的分区数量。 MySQL支持的HASH分区分为普通H
阅读全文
摘要:1.何为LIST分区? LIST和RANGE分区唯一的区别就是,RANGE分区存储的值是连续的区间,而LIST分区存储的值是离散的。 2.例子学习 CREATE TABLE t( a int, b int ) partition by list(b)( partition p0 values in(
阅读全文
摘要:1.何为RANGE分区? 顾名思义,范围分区,它是根据列值的范围进行分区的。 2.实例学习 首先,创建一张表,并为表新建范围分区: CREATE TABLE t( id INT ) PARTITION BY RANGE(id)( PARTITION p0 VAlUES LESS THAN(10),
阅读全文
摘要:1.什么是分区? 分区其实是一个过程,它将一个表或索引分解为多个更小,更容易管理的部分。 MySQL支持的分区类型为水平分区:将同一张表中不同行的记录分配到不同的物理文件中。 这样就可以根据分区对一些有规律的数据进行高效操作。MySQL数据库中的分区时局部分区,即一个分区中既存放数据也存放索引。 2
阅读全文
摘要:MySql支持索引提示(INDEX HINT)显式地告诉优化器使用那个索引。 一般来说,下面两种情况需要用到索引提示: 1)MySql错误的使用了某个索引从而导致SQL语句运行的非常慢。(这种情况非常少见,如果遇见了,就去买彩票吧) 2)某些SQL语句可以选择的索引非常多,这时优化器选择执行计划时间
阅读全文
摘要:InnoDB存储引擎支持覆盖索引 1)什么是覆盖索引? 覆盖索引实际上就是辅助索引,当从辅助索引中就可以查到查询需要的数据而不用去查询聚集索引时,这时辅助索引也可被称为覆盖索引。 下面回顾下辅助索引结构: 辅助索引的叶子节点仅存放索引键值以及该索引键值指向的主键。 2)使用覆盖索引的好处(提高查询速
阅读全文
摘要:1)什么是联合索引? 联合索引指的是对一张表上的多个列进行索引。也就是说,表上多个列加起来组成一个索引,供快速查询使用。 2)如何使用联合索引? 首先,给表添加索引 创建表时给表添加: CREATE TABLE t( a int, b int, primary key(a), key idx_a_b
阅读全文
摘要:1.什么是Cardinality? Cardinality中文译名为:基数。 它在数据库中表示的意思就是数据库中某个表的某个列中不重复行的总个数。 例如下表:t CREATE TABLE `t` ( `a` int(11) NOT NULL, `b` varchar(800) DEFAULT NUL
阅读全文
摘要:根据存储介质的不同,一般将数据库分为三种: 1)基于磁盘的数据库系统(最慢) 2)基于内存的数据库系统(最快,最贵) 3)混合型数据库系统(折中选择) 1.基于磁盘的数据库系统 最为常见,比如Mysql, Oracle,SQL Server等数据库都是基于磁盘的数据库系统。 毫无疑问,基于内存的数据
阅读全文
摘要:重点:SQL语言的逻辑执行顺序和普通的编程语言不同,下面进行详细学习 1.逻辑查询处理 首先创建一张名为customers的表 CREATE TABLE `customers` ( `customer_id` varchar(10) NOT NULL, `city` varchar(10) NOT
阅读全文
摘要:1.如何创建一个分区表 使用分区的好处不用多说了,懂得都懂。 1)如果想在创建表的时候创建分区我们可以如下写法: 下面以时间日期分区 CREATE TABLE test_partition( id int(11) not null , tran_date date not null , amt de
阅读全文
摘要:1.EXPLAIN命令 1)EXPLAIN SQL语句 这个命令将为我们展示指定sql的查询执行计划,也就是,用它让mysql告诉我们它准备怎么执行这条语句。 通过上面这些元素,我们可以清晰的了解mysql将如何执行这条sql,其中rows是大致将要扫描的行数,key表示用到的索引(null表示没用
阅读全文
摘要:1.如何找到运行缓慢的SQL语句 show full processlist命令 其中\G是为了让输出结果垂直打印。 这个命令将列出数据库历史操作中的语句的花费时间的倒序排序。 2.确认低效查询 explain select * from tablename; 假设第一步中确认了select * f
阅读全文