mysql單表體積和一個庫設計多少張表為妥

王滔發表於2013-11-17

這篇文章來自於看部落格園一個園友的分享經歷,原文:http://www.cnblogs.com/qqloving/p/3427138.html

 

他不清楚mysql一個庫裡面分多少張表合適,他一個庫分了8000張表。於是我看了,忍不住作答。

 

於是以個人隨筆的形式給自己做知識備忘吧。

 

1、單表體積多大的時候需要分表

 

曾經看過一個部落格,分析到什麼情況下需要分表。

單表形式訪問(也就是對這個表的訪問不涉及到join聯合查詢):單個表的體積大於2g的時候。或者說,單個表的行數達到一千萬的時候。

兩表jion:表的體積大於2G或行數大於500W。

 

在趕集網石展提到的分享中,純int行不能超過1000萬行,含char型別的欄位不能超過500萬行。與曾經看過文章提到的1000萬和500萬很相似。難道這是一個瓶頸值嗎?

 

2、單個庫控制多少張表為妥


聽過趕集網的一個dba的分享視訊。他從中提到,mysql的單庫表數量不要超過300-400張表。這個我也沒試過。不過我想應該是他經驗之談吧。

為什麼一個庫不能很多張表。我的理解是,mysql一個資料庫就是磁碟上一個資料夾。那麼裡面一張表就需要一個檔案記錄(像myisam型別的是需要三個檔案分別記錄表結構,記錄索引、記錄表資料)。
分8000張表,假設是myisam,則需要8000*3個檔案。
作業系統對一個目錄有檔案數限制,當檔案數量太多的時候,查詢檔案的速度就會慢,所以我們經常見到的上傳的圖片不會全部放到一個資料夾,一般是按照年月日來生成資料夾。

當然,網友提到表的是innodb型別。
innodb型別有兩種方式儲存資料:共享表和獨享表
獨享,Innodb_file_per_table,每個表的資料都對應儲存在一個檔案中
共享,一個庫下面所有的innodb型別表資料都儲存在一個檔案中。
mysql資料全部放到一個檔案中去了,當資料量超過一定額度,又會新生成一個資料檔案來儲存。

 

 

 

相關文章