2014-01-10 48 views
0

的选择引擎,这是在MySQL计算大小与一个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; 

正如你们可以看到,已经有2513419个数据行那里,会有像5-10million更​​多我的表结构。当前的数据库引擎也是InnoDB。

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

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

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

+0

不是真的,但如果数据库有ACID道具,那么它对我更好。你打算为nosql解决方案吗? –

+0

MyISAM不符合ACID标准。 – eggyal

回答

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

+0

我知道当前的表格大小,但是如何计算5/10M行? –

+0

@GunnerAziz:我的误解。见上面我的编辑。 – eggyal

+0

thnx,还有一件事:你能告诉我varchar(10)的情况下会是什么大小? –