据我所知,mysql中创建的每个表都会创建一个ibd文件,作为指向表的指针。对此表所做的任何更改都发生在此ibd文件上。现在,如果大小为1GB的Table1和它的ibd文件x.ibd被水平划分为p1、p2、p3、p4。大小相同的新分区p1、p2、p3和p4是否各有各自的ibd文件?如果没有,我们怎么做呢?
发布于 2016-08-23 18:18:37
简短回答:是的;4个.ibd文件的大小约为总大小的1/4。
较长的答覆:
有很多事情发生..。
PARTITIONs。在从5.1 (引入分区时)到至少5.7的所有情况下,分区实际上是一个单独的表。innodb_file_per_table控制InnoDB是将新表(及其分区)放在ibdata1文件中还是在单个.ibd文件(S)中。PARTITION子句在CREATE TABLE中的详细信息,分区的大小不一定相同。根据我的经验,PARTITION BY RANGE是唯一有用的用例,只有4种用例可以使用它。详细信息。
发布于 2016-08-23 12:19:18
如果您执行这样的简单查询:
CREATE TABLE partitioned
(id INT NOT NULL PRIMARY KEY AUTO_INCREMENT ,
column1 VARCHAR(12))
PARTITION BY HASH(id) PARTITIONS 3;您将看到,它确实为每个分区创建了独立的IBD文件(至少在mysql 5.7上是这样做的,无法回忆旧版本上的行为)
https://dba.stackexchange.com/questions/147622
复制相似问题