Mysql合并表原理

1.概述:

合并表是一种早期的、简单的分区实现,和分区表相比有一些不同的限制,并且缺乏优化。分区表严格来说是一个逻辑上的概念,用户无法访问底层的各个分区,对用户来说分区是透明的。但是合并表允许用户单独访问各个子表。分区表和优化器的结合更紧密,这也是未来发展的趋势,而合并表则是一种将要被淘汰的技术,在未来的版本中可能被删除。

2.原理:

合并表相当于一个容器,里面包含了多个真实表,可以在CREATE TABLE中使用一种特别的UNION语法来制定包含哪些真实表。下面是一个创建合并表的例子:

create table t1(a int not null primary key)engine=MyIsam;
create table t2(a int not null primary key)engine=MyIsam;
insert into t1(a) values(1),(2);
insert into t2(a) values(1),(2);
create table mrg(a int not null primary key)
engine=merge union=(t1,t2) insert_method=last;
select a from mrg;  

注意到,这里最后建立的合并表和前面的各个真实表字段完全相同,在合并表中有索引各个真实子表也有,这是创建合并表的前提条件,另外需要注意到,各个子表在对应列上都有主键限制,但是最终的合并表中仍然出现了重复值,这是合并表的另一个不足,合并表中的每一个子表行为和表定义都是相同,但是合并表在全局上并不受这些条件限制。

合并表的局限:

1)在使用create语句创建一个合并表的时候,并不会检查各个子表的兼容性。如果子表的定义稍有不同,那么mysql就可能创建出一个后面无法使用的合并表。

另外,如果在成功创建了合并表后再修改某个字段的定义,那么之后再使用合并表可能会报错;

2)根据合并表的特性,不难发现,在合并表上无法使用replace语法,无法使用自增字段

3)执行范围查询时,需要在每一个子表上各执行一次,这比直接访问单个表的性能要差很多,而且子表越多,性能越糟糕

4)全表扫描和普通表的全表扫描速度相同

5)在合并表上做唯一键和主键查询时,一旦找到一行数据就会停止,所以一旦查询在合并表的某一个子表中找到一行数据,就会立即返回,不会再访问任何其他的表

6)子表的读取顺序和create table语句中的顺序相同,如果需要频繁地按照某个特定顺序访问表,那么可以通过这个特性来让合并排序操作更高效

原文地址:https://www.cnblogs.com/Mr-Echo/p/9739360.html

时间: 2024-11-13 08:56:17

Mysql合并表原理的相关文章

MYSQL 分表原理(转)

简介:引用MySQL官方文档中的一段话:MERGE存储引擎,也被认识为MRG_MyISAM引擎,是一个相同的可以被当作一个来用的MyISAM表的集合."相同"意味着所有表同样的列和索引信息.你不能合并列被以不同顺序列于其中的表,没有恰好同样列的表,或有不同顺序索引的表.而且,任何或者所有的表可以用myisampack来压缩.例子:mysql> show engines;+--------------------+---------+------------------------

mysql用merge合并表

merge合并表的要求 1.合并的表使用的必须是MyISAM引擎 2.表的结构必须一致,包括索引.字段类型.引擎和字符集 实例: create table if not exists user1( id int(11) not null auto_increment, name varchar(50) default null, sex int(1) not null default 0, primary key (id) )engine = MyISAM default charset = u

MySQL 储存过程-原理、语法、函数详细说明

Mysql储存过程是一组为了完成特定功能的SQL语句集,经过编译之后存储在数据库中,当需要使用该组SQL语句时用户只需要通过指定储存过程的名字并给定参数就可以调用执行它了,简而言之就是一组已经写好的命令,需要使用的时候拿出来用就可以了.想要快速的了解Mysql储存过程吗,就一同看一下下文的"Mysql储存过程-原理.语法.函数详细说明"吧! 一.Mysql储存过程简介:储存过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序

MySQL Optimization 优化原理

MySQL Optimization 优化原理 MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器.下图展示了MySQL的逻辑架构图. MySQL逻辑架构,来自:高性能MySQL MySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处理.授权认证.安全等功能均在这一层处理. MySQL大多数核心服务均在中间这一层,包括查询解析.分析.优化.缓存.内置函数(比如:时间.数学.加密等函数).所有的跨存储引擎

十、mysql之索引原理与慢查询优化

mysql之索引原理与慢查询优化 一.介绍 1.什么是索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重.说起加速查询,就不得不提到索引了. 2.为什么要有索引呢? 索引在MySQL中也叫做"键",是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要.索引优化应

MySQL 一些内部原理

1. MySQL 体系结构 如下图: Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的(SQL Interface. Parser. Optimizer.Caches&Buffers.Pluggable Storage Engines) Connectors指的是不同语言中与SQL的交互 Management Serveices & Utilities: 系统管理和控制工具,例如备份恢复.Mysql复制.集群等 Connection Pool: 连接池:管理缓冲用户连接.用户

重新学习MySQL数据库4:Mysql索引实现原理

重新学习Mysql数据库4:Mysql索引实现原理 MySQL索引类型 (https://www.cnblogs.com/luyucheng/p/6289714.html) 一.简介 MySQL目前主要有以下几种索引类型: 1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引 二.语句 CREATE TABLE table_name[col_name data type][unique|fulltext][index|key][index_name](col_name[lengt

mysql分表方法-----MRG_MyISAM引擎分表法

一般来说,当我们的数据库的数据超过了100w记录的时候就应该考虑分表或者分区了,这次我来详细说说分表的一些方法.目前我所知道的方法都是MYISAM的,INNODB如何做分表并且保留事务和外键,我还不是很了解. 首先,我们需要想好到底分多少个表,前提当然是满足应用.这里我使用了一个比较简单的分表方法,就是根据自增id的尾数来分,也就是说分0-9一共10个表,其取值也很好做,就是对10进行取模.另外,还可以根据某一字段的md5值取其中几位进行分表,这样的话,可以分的表就很多了. 好了,先来创建表吧,

详解MySQL大表优化方案

当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑.部署.运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的.而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 尽量使用TINYINT.SMALLINT.MEDIUM_INT作为整数类型而非INT,如果非负则加上UNSIGNED VARCHAR的