2008-11-26 127 views
3

Microsoft SQL Server具有很好的功能,可以在數據庫變滿時自動擴展數據庫。在MySQL中,我明白數據庫實際上是一個包含與各種對象相對應的一堆文件的目錄。這是否意味着數據庫大小的概念不適用,並且mysql數據庫可以像可用磁盤空間那樣大,而不需要任何額外的關注?如果是的話,這種行爲在不同的存儲引擎中是否一樣?MySQL數據庫大小

回答

4

這取決於您正在使用的引擎。 MySQL附帶的列表可以在here找到。

MyISAM表格每個表格有一個文件。該文件可能會增長到您的文件系統的限制。隨着表格變大,您必須調整它,因爲索引和數據大小優化會限制默認大小。此外,該MyISAM documentation頁說:

有2^32的限制(〜4.295E + 09) 行中MyISAM表。如果使用--with-big-tables 選項構建 MySQL,則行限制爲 增加爲(2^32)^ 2(1.844E + 19)行。 請參見第2.16.2節「典型配置 選件」。 Unix和Linux的二進制分發包含在這個 選項中。

InnoDB可以在3種不同的模式下運行:使用innodb表文件,使用整個磁盤作爲表文件或使用innodb_file_per_table

  • 表文件是根據您的MySQL實例預先創建的。您通常會創建大量空間並對其進行監視。當它開始填滿時,您需要配置另一個文件並重新啓動服務器。您也可以將其設置爲autoextend,以便它在開始填充時爲最後一個表文件添加一塊空間。我通常不使用這個功能,因爲你永遠不知道什麼時候能夠擴大表的性能。 This page談論配置它。
  • 我從來沒有使用整個磁盤作爲表文件,但它可以完成。我相信你可以將InnoDB表格文件指向未格式化,未安裝的設備,而不是指向某個文件。
  • innodb_file_per_table使InnoDB表像MyISAM表一樣工作。每個表都有自己的表格文件。上次我使用這個時,如果從中刪除行,表文件不會縮小。當表被刪除或更改時,文件將調整大小。

存檔引擎是一個gzipped MyISAM表。

內存表根本不使用磁盤。實際上,當服務器重新啓動時,所有數據都會丟失。

合併表就像一個窮人的MyISAM表分區。它會導致大量相同的表格被查詢,好像有一個表格一樣。除FRM表定義外,除MyISAM外,不存在任何文件。

CSV表格是CSV文件的包裝。通常的文件系統限制適用於此處。它們不是太快,因爲它們不能有索引。

我不認爲有人再使用BDB。至少,我從來沒有用過它。它使用Berkly數據庫作爲後端。我不熟悉它的限制。

聯合表用於連接並查詢其他數據庫服務器上的表。再次,只有一個FRM文件。

黑洞引擎不在本地存儲任何東西。它主要用於創建複製日誌,不用於實際的數據存儲,因爲沒有數據存儲:)

MySQL Cluster完全不同:它存儲了內存中的所有內容(最新版本允許磁盤存儲),與所有其他引擎。

+0

非常感謝,這是一個非常詳細的答案! – azerole 2008-11-26 20:01:49

1

您描述的內容大致適用於MyISAM表格。對於InnoDB表而言,圖像是不同的,而且更類似於其他DBMS所做的:一個(或幾個)大文件,整個服務器具有複雜的內部結構。爲了優化它,您可以使用整個磁盤(或分區)作爲文件。 (至少在類Unix系統中,一切都是文件)