MySQL表最大能达到多少?
?
MySQL 3.22限制的表大小為4GB。由于在MySQL 3.23中使用了MyISAM存儲引擎,最大表尺寸增加到了65536TB(2567–?1字節)。由于允許的表尺寸更大,MySQL數據庫的最大有效表尺寸通常是由操作系統對文件大小的限制決定的,而不是由MySQL內部限制決定的。InnoDB存儲引擎將InnoDB表保存在一個表空間內,該表空間可由數個文件創建。這樣,表的大小就能超過單獨文件的最大容量。表空間可包括原始磁盤分區,從而使得很大的表成為可能。表空間的最大容量為64TB。
在下面的表格中,列出了一些關于操作系統文件大小限制的示例。這僅是初步指南,并不是最終的。要想了解最新信息,請參閱關于操作系統的文檔。
?
操作系統 | 文件大小限制 |
Linux 2.2-Intel 32-bit | 2GB (LFS: 4GB) |
Linux 2.4+ | (使用 ext3 文件系統) 4TB |
Solaris 9/10 | 16TB |
NetWare w/NSS 文件系統 | 8TB |
win32 w/ FAT/FAT32 | 2GB/4GB |
win32 w/ NTFS | 2TB(可能更大) |
MacOS X w/ HFS+ | 2TB |
在Linux 2.2平臺下,通過使用對ext2文件系統的大文件支持(LFS)補丁,可以獲得超過2GB的MyISAM表。在Linux 2.4平臺下,存在針對ReiserFS的補丁,可支持大文件(高達2TB)。目前發布的大多數Linux版本均基于2.4內核,包含所有所需的LFS補丁。使用JFS和XFS,petabyte(千兆兆)和更大的文件也能在Linux上實現。然而,最大可用的文件容量仍取決于多項因素,其中之一就是用于存儲MySQL表的文件系統。
關于Linux中LFS的詳細介紹,請參見Andreas Jaeger的“Linux中的大文件支持”頁面:http://www.suse.de/~aj/linux_lfs.html。
Windows用戶請注意: FAT和VFAT (FAT32)不適合MySQL的生產使用。應使用NTFS。
在默認情況下,MySQL創建的MyISAM表允許的最大尺寸為4GB。你可以使用SHOW TABLE STATUS語句或myisamchk -dv?tbl_name檢查表的最大尺寸。
?
| 1 | mysql > show table status like 't_user'; |
如果需要使用大于4GB的MyISAM表(而且你的操作系統支持大文件),可使用允許AVG_ROW_LENGTH和MAX_ROWS選項的CREATE TABLE語句。
創建了表后,也可以使用ALTER TABLE更改這些選項,以增加表的最大允許容量。
以下語句將表的最大容量設成了1000G(1TB)
?
| 1 | mysql > alter table t_user max_rows = 200000000000 avg_row_length = 50; |
處理MyISAM表文件大小的其他方式:
如果你的大表是只讀的,可使用myisampack壓縮它。myisampack通常能將表壓縮至少50%,因而,從結果上看,可獲得更大的表。此外,myisampack還能將多個表合并為1個表。
MySQL包含一個允許處理MyISAM表集合的MERGE庫,這類MyISAM表具有與單個MERGE表相同的結構。
下面是一個例子:
這是一個存儲天氣的表:
mysql> describe weather; +-----------+--------------+------+-----+------------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------+--------------+------+-----+------------+-------+ | city | varchar(100) | | MUL | | | | high_temp | tinyint(4) | | | 0 | | | low_temp | tinyint(4) | | | 0 | | | the_date | date | | | 0000-00-00 | | +-----------+--------------+------+-----+------------+-------+ 4 rows in set (0.01 sec)
看看它的容量大小限制,我們使用?SHOW TABLE STATUS
mysql> show table status like 'weather' \G *************************** 1. row *************************** Name: weather Type: MyISAM Row_format: Dynamic Rows: 0 Avg_row_length: 0 Data_length: 0 Max_data_length: 4294967295 Index_length: 1024 Data_free: 0 Auto_increment: NULL Create_time: 2003-03-03 00:43:43 Update_time: 2003-03-03 00:43:43 Check_time: 2003-06-14 15:11:21 Create_options: Comment: 1 row in set (0.00 sec)
注意 Max_data_length?為4GB. 我們把它改大:
mysql> alter table weather max_rows = 200000000000 avg_row_length = 50; Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show table status like 'weather' \G *************************** 1. row *************************** Name: weather Type: MyISAM Row_format: Dynamic Rows: 0 Avg_row_length: 0 Data_length: 0 Max_data_length: 1099511627775 Index_length: 1024 Data_free: 0 Auto_increment: NULL Create_time: 2003-06-17 13:12:49 Update_time: 2003-06-17 13:12:49 Check_time: NULL Create_options: max_rows=4294967295 avg_row_length=50 Comment: 1 row in set (0.00 sec)
現在的表可以存儲更多的內容了.
是否行數太多?
修改容量后,你會發現(上面例子)Create_options?中多了最大行數的限制4294967295,是的,它仍然有一定的限制,但現在的限制是行數,并不是表的容量大小了。也就是說你的最大行數不能超過4294967295.
為什么?
因為系統是32位,如果你移到64位的系統里,這個行數限制就會增加.
?
摘自:?http://blog.csdn.net/gayayang/article/details/7200958
posted on 2017-12-12 09:15?Alfa 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/wuyifu/p/8026243.html
總結
以上是生活随笔為你收集整理的MySQL表最大能达到多少?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java1.8 lambda进行并行运算
- 下一篇: libevent编程疑难解答