2016-12-19 90 views
0

我有點困惑。我必須估計表格的大小以適應200萬行。我不知道主要和次要索引需要多少空間。特別是對於複合主要和次要索引。該表的結構是一樣的東西如何計算mysql表/數據庫大小

數據庫引擎:InnoDB的

create table abc(

a int, 
b varchar(30), 
c char(10), 
d bigint(8), 

FOREIGN KEY(a) 
     REFERENCES af(a_id) 
     ON DELETE RESTRICT 
     ON UPDATE RESTRICT, 
primary key(a,b,c) 
) 

CREATE UNIQUE INDEX idx_abc 
    ON abc 
    (a ASC, d ASC); 

CREATE INDEX idx_abc2 
    ON abc 
    (d); 

請幫

鮮于

+0

由於只有2萬行且每行約50字節,這是不值得擔心的。更重要的是,如果您放棄idx_abc2並將idx_abc更改爲(d ASC,ASC) – e4c5

+0

,那只是瞭解尺寸部分的估計。數據將會非常大。 –

回答

0

您可以使用此查詢,以顯示錶的大小(雖然你需要先替換變量):

SELECT 
    table_name AS `Table`, 
    round(((data_length + index_length)/1024/1024), 2) `Size in MB` 
FROM information_schema.TABLES 
WHERE table_schema = "$DB_NAME" 
    AND table_name = "$TABLE_NAME"; 

or this que RY列出每個表的大小在每個數據庫中,最大的第一:

SELECT 
    table_schema as `Database`, 
    table_name AS `Table`, 
    round(((data_length + index_length)/1024/1024), 2) `Size in MB` 
FROM information_schema.TABLES 
ORDER BY (data_length + index_length) DESC; 
+0

表是空的。所以在數據進入表格之前估計大小。 –

+0

查看我的更新回答 –

0

你可以使用mysql.innodb_index_stats數據/索引的大小。 警告,大小以頁面單位給出=>您必須將其乘以通常爲16K的頁面大小。

+0

請注意,表格是空的。我需要在插入表中的數據之前進行估計。 –

0

要做出確切的估計,您需要創建表的副本並生成2 000 000個易失性數據,表示實際大小。如其他答案中所示,測量表格以及索引,然後知道答案,您可以刪除副本。

如果在您的情況下嚴謹性不重要,則將記錄佔用的字節數與記錄數相乘,然後對索引執行相同操作。僅

記錄* 2 000 000 +指數* 2 000 000〜= 50 * 2 000 000 + 60 * 2 000 000 = 110 * 2 000 000 = 22 000 000

+0

我不介意如果空間稍高一點。我知道,對於主索引不佔用任何空間。即使它是一個複合主鍵也是如此嗎?那麼計算二級指數大小的方法是什麼? –

+0

@Sunil,實際上隨着表的增加,主鍵的大小也隨之增加。當沒有主鍵時,InnoDB創建一個隱藏的聚集索引,這就是爲什麼它看起來索引沒有增加大小,但事實上它確實存在,但是隱藏索引補償了它,添加了一些大小到桌子也是誤導。在這裏閱讀更多:http://dba.stackexchange.com/questions/44520/does-the-size-of-the-primary-key-contribute-to-table-size –