使用Mysql Merge存储引擎实现分表
对于数据量很大的一张表,i/o效率底下,分表势在必行!
使用程序分,对不同的查询,分配到不同的子表中,是个解决方案,但要改代码,对查询不透明。
好在mysql 有两个解决方案:
Partition(分区,在MySQL 5.1.中实现) 和 Mysql Merge存储引擎。
本文讨论 Mysql Merge存储引擎。
CREATE TABLE t1 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20));
CREATE TABLE t2 ( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20));
INSERT INTO t1 (message) VALUES ('Testing'),('table'),('t1');
INSERT INTO t2 (message) VALUES ('Testing'),('table'),('t2');
CREATE TABLE total (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20)) ENGINE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;
对应定期分表的情况下,只要定期相应的增加一个基础表,再修改merge表中的 union 就行了(ALTER TABLE tbl_name UNION=(...))。
如在增加一个表(需和其他基础表一样的结构):
CREATE TABLE t3( a INT NOT NULL AUTO_INCREMENT PRIMARY KEY, message CHAR(20));
ALTER TABLE total UNION=(t1,t2,t3)
INSERT_METHOD=LAST;表示插入的方法,INSERT_METHOD的值可以是 FIRST(插入第一个表),LAST(最后一个表),NO(不能插入)
查询的时候,和平常一样
select * from total where ....
merge表会自动找到相应的基础表进行查询。
需要注意的是 merge表并不维护 “唯一性”检查,唯一性有各基础表完成。所以插入新的记录时候可能和其他基础表的内容重复。所以再插入去需要用代码进行唯一性检查。
详情参考:
http://dev.mysql.com/doc/refman/5.1/en/merge-storage-engine.html
http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html#merge-storage-engine
分享到:
相关推荐
这通常通过不同的分表方法实现,如垂直分表(根据列的逻辑关系拆分)、水平分表(根据行数据分布拆分)或使用Merge存储引擎。分表后的数据处理发生在各个独立的小表中,通过一个总表或者中间件来协调查询,提高并发...
本文提出的优化分区分表算法主要基于MySQL中的range分区和Merge存储引擎。通过合理的分区策略和高效的存储机制,该算法能够有效提升大规模数据查询的操作效率。 ##### 3.1 Range分区 Range分区是一种常见的分区...
MyBatis实现Mysql数据库分库分表操作和总结 MyBatis是一款流行的持久层框架,能够与Mysql数据库进行交互。在大规模的应用系统中,数据库的性能和可扩展性变得非常重要。为了解决这个问题,需要实现数据库的分库分表...
- **实现难度**:使用Merge存储引擎的分表相对简单,与分区难度相当;其他分表方式可能更复杂;分区的实现较为直观,对代码透明。 4. **联系**: - **性能优化**:无论是分表还是分区,都能提升MySQL在高并发情况...
**实现难度**,使用Merge存储引擎的分表相对简单,对应用程序的影响较小。而分区的实现则相对直接,创建分区表与普通表的语法类似,同样对应用程序透明。 **联系**,分表和分区并不互相排斥,而是可以结合使用。...
MySQL数据库在处理大数据量时,可能会遇到性能瓶颈...垂直分表适用于列多且锁竞争激烈的情况,水平分表和分区适用于数据量大、查询性能要求高的场景,而Merge存储引擎则为分片操作提供了透明性,简化了应用程序的处理。
MySQL集群适合需要高可用性和扩展性的大型系统,预估分表适用于能预测数据分布的场景,而Merge存储引擎则是对已有大表的一种补救措施。在实际应用中,还需要结合数据库设计原则,如范式理论,以及适当的数据分区策略...
分区表是由多个相关的底层表实现,这些底层表也是由句柄对象表示,所以我们也可以直接访问各个分区,存储引擎管理分区的各个底层表和管理普通表一样(所有的底层表都必须使用相同的存储引擎),分区表的索引只是在...
例如,使用Merge存储引擎进行分表,会创建一个总表(如alluser)作为接口,实际数据存储在各个分表(如user1和user2)中。总表并不存储数据,只是一个逻辑上的容器,用于合并查询和管理分表。 **二、分区** 分区则...
MySQL由几个主要组件构成,包括服务器进程(mysqld)、客户端接口、存储引擎和一系列系统表。服务器进程负责处理SQL查询,客户端接口则用于与服务器交互,存储引擎负责数据的读写操作,而系统表存储了数据库的元数据...
最后,为了方便查询所有分表中的数据,可以使用MySQL的`MERGE`存储引擎来实现一个逻辑上的“虚拟表”。通过创建一个`MERGE`表,将所有分表作为子表,这个`MERGE`表本身不存储任何数据,只是提供了统一的查询接口。...
12. **分区与分表**:理解MySQL的分区功能,以及垂直拆分和水平拆分的实现方法,以提升大数据量下的查询性能。 13. **云环境下的MySQL**:适应AWS RDS、Google Cloud SQL等云数据库服务,理解其特性和使用限制。 ...
例如,可以通过增加`innodb_buffer_pool_size`的值来提高InnoDB存储引擎的缓存能力,推荐设置为系统可用内存的70%-80%(如果仅使用InnoDB)。此外,为了提高写入性能,可以适当增大`innodb_autoextend_increment`,...
使用merge引擎的分表是相对简单的方式。 - **分区**是将一个表的数据逻辑上划分为多个部分,但物理上仍保持在单个表中,通常在同一磁盘或不同磁盘上。分区可以提高查询性能,特别是对于范围查询和聚合操作,因为...
MySQL是一种广泛使用的开源关系型数据库管理系统(RDBMS),它以其高效、稳定和易于管理的特点在Web应用程序中占据重要地位。本压缩包“学习mysql高级知识.zip”显然旨在帮助用户深入理解并掌握MySQL的高级特性。...
MySQL中的表类型主要有MyISAM、Heap、Merge、InnoDB和ISAM。MyISAM不支持事务,但支持表级锁定,适合读多写少的场景。InnoDB则支持事务处理,提供行级锁定和外键约束,适合需要事务安全的应用。两者在索引结构、存储...