分表是将一个大表按照必定的规则分解成多张具备独立存储空间的实体表,咱们能够称为子表,每一个表都对应三个文件,MYD数据文件,.MYI索引文件,.frm表结构文件。这些子表能够分布在同一块磁盘上,也能够在不一样的机器上。app读写的时候根据事先定义好的规则获得对应的子表名,而后去操做它。mysql
分区和分表类似,都是按照规则分解表。不一样在于分表将大表分解为若干个独立的实体表,而分区是将数据分段划分在多个位置存放,能够是同一块磁盘也能够在不一样的机器。分区后,表面上仍是一张表,但数据散列到多个位置了。app读写的时候操做的仍是大表名字,db自动去组织分区的数据。sql
1.都能提升mysql的性高,在高并发状态下都有一个良好的表现。
2.分表和分区不矛盾,能够相互配合的,对于那些大访问量,而且表数据比较多的表,咱们能够采起分表和分区结合的方式(若是merge这种分表方式,不能和分区配合的话,能够用其余的分表试试),访问量不大,可是表数据不少的表,咱们能够采起分区的方式等。
3.分表技术是比较麻烦的,须要手动去建立子表,app服务端读写时候须要计算子表名。采用merge好一些,但也要建立子表和配置子表间的union关系。
4.表分区相对于分表,操做方便,不须要建立子表。
咱们知道对于大型的互联网应用,数据库单表的数据量可能达到千万甚至上亿级别,同时面临这高并发的压力。Master-Slave结构只能对数据库的读能力进行扩展,写操做仍是集中在Master中,Master并不能无限制的挂接Slave库,若是须要对数据库的吞吐能力进行进一步的扩展,能够考虑采用分库分表的策略。
5.数据库分表能够解决单表海量数据的查询性能问题,分库能够解决单台数据库的并发访问压力问题数据库
事实它并非分表,但起到了和分表相同的做用。集群可分担数据库的操做次数,将任务分担到多台数据库上。集群能够读写分离,减小读写压力。从而提高数据库性能。并发
1 Range(范围)–这种模式容许将数据划分不一样范围。例如能够将一个表经过年份划分红若干个分区。
2 Hash(哈希)–这中模式容许经过对表的一个或多个列的Hash Key进行计算,最后经过这个Hash码不一样数值对应的数据区域进行分区。例如能够创建一个对表主键进行分区的表。
3 Key(键值)-上面Hash模式的一种延伸,这里的Hash Key是MySQL系统产生的。
4 List(预约义列表)–这种模式容许系统经过预约义的列表的值来对数据进行分割。
5 composite(复合模式) –以上模式的组合使用。app
CREATE TABLE IF NOT EXISTS `alluser` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `sex` int(1) NOT NULL DEFAULT '0', INDEX(id) ) TYPE=MERGE UNION=(user1,user2) INSERT_METHOD=LAST AUTO_INCREMENT=1;
mysql>show engines;的时候你会发现mrg_myisam其实就是merge。高并发