Posts Tagged ‘Merge’
以下是我对使用 PHP + MySQL 处理负载过重的数据库问题思考和总结,经验方面一定有着不少欠缺的地方,欢迎高手前来指教: 在设计时考虑合理的表结构和相应大概要承受多少访问压力,需不需要分表,如果需要分表每个表放多少条记录合适; 对于分表的实现可以采用 PHP 处理或是 MySQL 自带的 MERGE 表类型(即 MRG_MyISAM)来处理: ⑴如果是使用 PHP 处理有两种情况: ①没有数据的新库新表要为抗压做准备,比如一个聊天室一开始就要考虑可能有多个子聊天室,可以根据一些条件来进行,例如按照主键或是 ID 的范围得出一种算法在存储时就按照相应算法分配存储到同结构但不同名的表中; ②如果是对已经有大量数据需要减压的数据库可以按照一定规则,比如按照该表的访问频率多少,把常用的数据放到一个表中,很少访问的数据放到另一张表中,访问数据时先访问常用表,找不到时再访问非常用表。 ⑵如果采用 MySQL 自带的分表方式处理,就是使用 MySQL 的 MERGE 表类型(即 MRG_MyISAM)。这种时候一般是针对已有教多数据,单个数据表无法承受负载时才会使用这种方式,可以针对这个教大的表使用一些工具比如 phpMyadmin 来对相关表的类型进行修改,同时确定分表中每个表里的记录数,不过这个操作需要慎重,除了首次分表外,以后的数据将加到最后一个子表中,想要再分时就需要 手动处理,编辑相关的“表明 .MRG”文件了,同时还要处理新的子表的“ALTER TABLE tablename AUTO_INCREMENT = xxx”。 采用 MERGE 表时需要注意手册中提到的一些问题: ①如果你使用 ALTER TABLE 来把 MERGE 表变为其它表类型,到底层表的映射就被丢失了。取而代之的,来自底层 MyISAM 表的行被复制到已更换的表中,该表随后被指定新类型。 ②REPLACE 不起作用。 ③ 没有 WHERE 子句,或者在任何被映射到一个打开的 [...]
他将多个表在逻辑上当作一个表来查询。他建立后有两个文件, .frm 表结构定义 .mrg union表的名字清单 两个基本表: CREATE TABLE TEST_MERGE_1( ID INT(5) NOT NULL, VALUE VARCHAR(100) NOT NULL, PRIMARY KEY(ID) ) CREATE TABLE TEST_MERGE_2( ID INT(5) NOT NULL, VALUE VARCHAR(100) NOT NULL, PRIMARY KEY(ID) ) MERGE表的建立: CREATE TABLE TEST_MERGE( ID INT(5) NOT NULL, VALUE VARCHAR(100) NOT NULL, PRIMARY KEY(ID) ) TYPE=MERGE UNION=(TEST_MERGE_1,TEST_MERGE_2) INSERT_METHOD=LAST; 1. 此表类似于SQL中的union机制。 2. [...]

