计算尺寸&选择mysql表的引擎

时间:2014-01-10 21:34:07

标签: mysql sql database database-design

这是我在mysql中的表结构

CREATE TABLE `p_camat` (
  `cid` int(11) NOT NULL AUTO_INCREMENT,
  `pid` int(11) NOT NULL,
  `col1` int(5) NOT NULL,
  `col2` int(5) NOT NULL,
  `col3` int(5) NOT NULL,
  `col4` int(5) NOT NULL,
  `col5` int(5) NOT NULL,
  `col6` int(5) NOT NULL,
  `col7` int(5) NOT NULL,
  `col8` int(5) NOT NULL,
  `row_no` int(11) NOT NULL,
  `col_no` int(11) NOT NULL,
  `mat_dim` int(11) DEFAULT '64',
  PRIMARY KEY (`cid`),
  KEY `pid` (`pid`),
  CONSTRAINT `p_camat_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `p_protein` (`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=2513419 DEFAULT CHARSET=latin1;

正如你们所看到的,那里已经有2,513,419个数据行,而且还会有500万到1000万个。当前的数据库引擎也是InnoDB。

那么如何计算这个表的大小(比如它是否有5M / 10M行)?我读了一些文档,但没有一个是明确的。

另外,mysql上的哪个引擎最好(myisam / innodb),因为它有85%的读数和15%更新(之后没有插入)?

注意:除了fk之外没有其他索引。如果它用于此目的,我可以使用no-sql或其他数据库。

1 个答案:

答案 0 :(得分:0)

  1.   

    那么如何计算该表的大小(如果它有5M / 10M行)?

    Data Type Storage Requirements记录了每种类型值所需的存储量。在您的情况下,您的所有列都是INT(每个值占用4个字节),并且您有13个 - 因此每个表记录将占用13 * 4 = 52个字节。你可以相应地增加它。

    显然,这两个索引也会占用一些空间,但所需的空间量将取决于存储引擎和存储的值。

    您还可以查询INFORMATION_SCHEMA的平均行大小,该大小应为52个字节,因为在这种情况下,所有行的大小必须相同:

    SELECT AVG_ROW_LENGTH
    FROM   INFORMATION_SCHEMA.TABLES
    WHERE  TABLE_SCHEMA = DATABASE()
       AND TABLE_NAME = 'p_camat'
    

    你甚至可以检查INDEX_LENGTH,并且,为了近似,尝试推断更大的表格大小。

  2.   

    另外,mysql上的哪个引擎最好(myisam / innodb),因为它有85%的读数和15%更新(之后没有插入)?

    这取决于您的要求:请参阅MyISAM versus InnoDB