分表后 快速查询所有数据

MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询。构成一个MERGE数据表结构的各成员MyISAM数据表必须具有完全一样的结构。每一个成员数据表的数据列必须按照同样的顺序定义同样的名字和类型,索引也必须按照同样的顺序和同样的方式定义。

假设你有几个日志数据表,他们内容分别是这几年来每一年的日志记录项,他们的定义都是下面这样,YY代表年份:

[sql] view plain copy

  1. CREATE TABLE log_YY
  2. (
  3. dt  DATETIME NOT NULL,
  4. info VARCHAR(100) NOT NULL,
  5. INDEX (dt)
  6. ) ENGINE = MyISAM;

假设日志数据表的当前集合包括 log_2004、log_2005、log_2006、log_2007 ,而你可以创建一个如下所示的MERGE数据表把他们归拢为一个逻辑单元:

[sql] view plain copy

  1. CREATE TABLE log_merge
  2. (
  3. dt DATETIME NOT NULL,
  4. info VARCHAR(100) NOT NULL,
  5. INDEX(dt)
  6. ) ENGINE = MERGE UNION = (log_2004, log_2005, log_2006, log_2007);

ENGINE选项的值必须是MERGE,UNION选项列出了将被收录在这个MERGE数据表离得各有关数据表。把这个MERGE创建出来后,就可以像对待任何其他数据表那样查询它,只是每一次查询都将同时作用与构成它的每一个成员数据表 。下面这个查询可以让我们知道上述几个日志数据表的数据行的总数:

[sql] view plain copy

  1. SELECT COUNT(*) FROM log_merge;

下面这个查询用来确定在这几年里每年各有多少日志记录项:

[sql] view plain copy

  1. SELECT YEAR(dt) AS y, COUNT(*) AS entries FROM log_merge GROUP BY y;

除了便于同时引用多个数据表而无需发出多条查询,MERGE数据表还提供了以下一些便利。

  • MERGE数据表可以用来创建一个尺寸超过各个MyISAM数据表所允许的最大长度逻辑单元
  • 你看一把经过压缩的数据表包括到MERGE数据表里。比如说,在某一年结束之后,你应该不会再往相应的日志文件里添加记录,所以你可以用myisampack工具压缩它以节省空间,而MERGE数据表仍可以像往常那样工作

MERGE数据表也支持DELETE 和UPDATE操作。INSERT操作比较麻烦,因为MySQL需要知道应该把新数据行插入到哪一个成员表里去。在MERGE数据表的定义里可以包括一个INSERT_METHOD选项,这个选项的可取值是NO、FIRST、LAST,他们的含义依次是INSERT操作是被禁止的、新数据行将被插入到现在UNION选项里列出的第一个数据表或最后一个数据表。比如说,以下定义将对log_merge数据表的INSERT操作被当作对log_2007数据表----它是UNION选项所列出的最后一个数据表:

[sql] view plain copy

  1. CREATE TABLE log_merge
  2. (
  3. dt DATETIME NOT NULL,
  4. info VARCHAR(100) NOT NULL,
  5. INDEX(dt)
  6. ) ENGINE = MERGE UNION = (log_2004, log_2005, log_2006, log_2007)
  7. INSERT_METHOD = LAST;

创建一个新的成员数据表log_2009并让他有同样的表结构,然后修改log_merge数据表把log_2009包括进来:

[sql] view plain copy

    1. log_2009:
    2. CREATE TABLE log_2009 LIKE log_2008;
    3. ALTER TABLE log_merge
    4. UNION = (log_2004, log_2005, log_2006, log_2007,log_2008,log_2009);
时间: 2024-10-23 09:41:15

分表后 快速查询所有数据的相关文章

mysql分表后组合查询

<?php //注册到月份表 $sql = "INSERT INTO tbl_view_".date('Ym')."(ip,city,dateline) VALUES('127.0.0.1','CHINA',1562065253)"; $id = DB::query($sql); //查询的时候按时间条件组合查询SQL $start_date = strtotime('2019-01-01 00:00:00'); $end_date = strtotime('

hibernate实现分表后获取insert自增ID方法。

#第一种基于原生的JDBC的方式实现 private Integer insert(POJO entity, String table) throws SQLException { String insertSQL = "INSERT INTO " + table + " (XXXX)VALUES(?,?,?,?,?,?,?,?)"; DataSource dataSource = SessionFactoryUtils.getDataSource(getHiber

MySQL订单分库分表多维度查询

转自:http://blog.itpub.net/29254281/viewspace-2086198/ MySQL订单分库分表多维度查询 MySQL分库分表,一般只能按照一个维度进行查询. 以订单表为例, 按照用户ID mod 64 分成 64个数据库.按照用户的维度查询很快,因为最终的查询落在一台服务器上.但是如果按照商户的维度查询,则代价非常高.需要查询全部64台服务器.在分页的情况下,更加恶化.比如某个商户查询第10页的数据(按照订单的创建时间).需要在每台数据库服务器上查询前100条数

分库分表后如何部署上线?

引言 我们先来讲一个段子 面试官:"有并发的经验没?" 应聘者:"有一点." 面试官:"那你们为了处理并发,做了哪些优化?" 应聘者:"前后端分离啊,限流啊,分库分表啊.." 面试官:"谈谈分库分表吧?" 应聘者:"bala.bala.bala.." 面试官心理活动:这个仁兄讲的怎么这么像网上的博客抄的,容我再问问. 面试官:"你们分库分表后,如何部署上线的?" 应聘

MySQL将表a中查询的数据插入到表b中

MySQL将表a中查询的数据插入到表b中 如果表b存在 insert into b select * from a; 如果表b不存在 create table b as select * from a; 扩展: 将b表中的某写字段值插入到a表中 insert into a (userID,userName) select b.userID,b.userName from tr_ajax_chat_messages; 将a表和b表userID相等的值保存到a表 update a set a.use

Python学习---Django误删除sql表后,如何创建数据

误删除sql表后,怎么创建数据? 仅仅适合单表,多表因为涉及约束, python mangage.py makemigrations  --> 生成migrations目录和根数据库对应的sql python mangage.py migrate         --> 同步数据到数据库内 python mangage.py migrate --fake    --> 不同步数据到数据库内 原文地址:https://www.cnblogs.com/ftl1012/p/9417319.ht

mysql大数据分表后查询

当数据量猛增的时候,大家都会选择库表散列等等方式去优化数据读写速度,举例说明: 1亿条数据,分100张表 1.首先创建100张表 $i=0;while($i<=99){echo "$newNumber \r\n";$sql="CREATE TABLE `code_".$i."` ( `full_code` char(10) NOT NULL, `create_time` int(10) unsigned NOT NULL, PRIMARY KEY 

为了提高查询效率而做分表心得

原博主帖子 http://www.cnblogs.com/zhangyabin---acm/p/5955001.html 针对超大业务数据在同一张表,但是没有其他业务字段进行区分的时候 可以使用如下方法: 业务场景如下:在海量的库中,查询某一行的数据,并且没有办法通过业务进行排除,例如某一分类下数据量非常大,但是需要进 行实时的精确查找 使用固定列(即不会因为业务变动而变化的列吗,通常为序列或不规则的UID字符串) 进行单个字符串 或者 数字相加 这样可以得到一个数字 或 字符串  使用这些数字

重新学习Mysql数据13:Mysql主从复制,读写分离,分表分库策略与实践

一.MySQL扩展具体的实现方式 随着业务规模的不断扩大,需要选择合适的方案去应对数据规模的增长,以应对逐渐增长的访问压力和数据量. 关于数据库的扩展主要包括:业务拆分.主从复制.读写分离.数据库分库与分表等.这篇文章主要讲述数据库分库与分表 (1)业务拆分 在?大型网站应用之海量数据和高并发解决方案总结一二?一篇文章中也具体讲述了为什么要对业务进行拆分. 业务起步初始,为了加快应用上线和快速迭代,很多应用都采用集中式的架构.随着业务系统的扩大,系统变得越来越复杂,越来越难以维护,开发效率变得越