2013-06-06 133 views
9

我以前使用過mysql,但我不明白它是如何在內部工作的。有人能指點我一個很好的資源,說明磁盤上的數據的內部表示看起來像也可能討論如何快速地搜索和訪問事物?更好的是,有人能夠提出一個高層次簡潔的解釋嗎?mysql數據如何存儲在磁盤上?

+0

這個問題值得一些真正的好研究,而不僅僅是一個問題答案會話,可能更適合於http://dba.stackexchange.com –

+0

「Pro MySQL」這本書對此過程進行了相當徹底的解釋。 – Marty

+0

恕我直言,這取決於您使用的MyISSAM和InnoDB結構的存儲引擎是安靜的不同。然而AFIK的所有使用D或KD樹(我不知道K現在)。 – rekire

回答

12

MySQL服務器以多種方式使用磁盤空間,主要用於在稱爲服務器數據目錄的單個位置下找到的目錄和文件。服務器使用其數據目錄存儲以下所有內容:

  1. 數據庫目錄。無論您在數據庫中創建什麼類型的表,每個數據庫都對應於數據目錄下的單個目錄。例如,給定的數據庫由一個目錄表示,不管它包含MyISAM表,InnoDB表還是兩者的組合。
  2. 包含表結構描述的表格格式文件(.frm文件)。每個表都有自己的.frm文件,位於相應的數據庫目錄中。無論哪個存儲引擎管理表格,情況都是如此。
  3. 數據和索引文件是由某些存儲引擎爲每個表創建的,並放置在相應的數據庫目錄中。例如,MyISAM存儲引擎爲每個表創建一個數據文件和一個索引文件。
  4. InnoDB存儲引擎有它自己的表空間和日誌文件。表空間包含所有InnoDB表的數據和索引信息,以及必須回滾事務時所需的撤消日誌。日誌文件記錄關於已提交事務的信息,並用於確保不發生數據丟失。默認情況下,表空間和日誌文件位於數據目錄中。默認的表空間文件名爲ibdata1,默認的日誌文件名爲ib_logfile0和ib_logfile1。 (也可以將InnoDB配置爲每個表使用一個表空間文件,在這種情況下,InnoDB爲表的數據庫目錄中的給定表創建表空間文件。)
  5. 服務器日誌文件和狀態文件。這些文件包含有關服務器已處理的語句的信息。日誌用於複製和數據恢復,獲取用於優化查詢性能的信息,並確定操作問題是否正在發生。
+0

很好的答案,安靜的許多信息,你寫這一切都從你的記憶?如果可能的話請爲未來的研究添加一些參考。 – rekire

+0

我在研究MySQL存儲時發現了這些信息。這是在MySQL DBA博客 – 2013-06-06 05:12:06

+0

@PeterVenderberghe中提到的一個好的... – 2013-06-06 05:14:13

相關問題