我以前使用過mysql,但我不明白它是如何在內部工作的。有人能指點我一個很好的資源,說明磁盤上的數據的內部表示看起來像也可能討論如何快速地搜索和訪問事物?更好的是,有人能夠提出一個高層次簡潔的解釋嗎?mysql數據如何存儲在磁盤上?
9
A
回答
12
MySQL服務器以多種方式使用磁盤空間,主要用於在稱爲服務器數據目錄的單個位置下找到的目錄和文件。服務器使用其數據目錄存儲以下所有內容:
- 數據庫目錄。無論您在數據庫中創建什麼類型的表,每個數據庫都對應於數據目錄下的單個目錄。例如,給定的數據庫由一個目錄表示,不管它包含MyISAM表,InnoDB表還是兩者的組合。
- 包含表結構描述的表格格式文件(.frm文件)。每個表都有自己的.frm文件,位於相應的數據庫目錄中。無論哪個存儲引擎管理表格,情況都是如此。
- 數據和索引文件是由某些存儲引擎爲每個表創建的,並放置在相應的數據庫目錄中。例如,MyISAM存儲引擎爲每個表創建一個數據文件和一個索引文件。
- InnoDB存儲引擎有它自己的表空間和日誌文件。表空間包含所有InnoDB表的數據和索引信息,以及必須回滾事務時所需的撤消日誌。日誌文件記錄關於已提交事務的信息,並用於確保不發生數據丟失。默認情況下,表空間和日誌文件位於數據目錄中。默認的表空間文件名爲ibdata1,默認的日誌文件名爲ib_logfile0和ib_logfile1。 (也可以將InnoDB配置爲每個表使用一個表空間文件,在這種情況下,InnoDB爲表的數據庫目錄中的給定表創建表空間文件。)
- 服務器日誌文件和狀態文件。這些文件包含有關服務器已處理的語句的信息。日誌用於複製和數據恢復,獲取用於優化查詢性能的信息,並確定操作問題是否正在發生。
+0
很好的答案,安靜的許多信息,你寫這一切都從你的記憶?如果可能的話請爲未來的研究添加一些參考。 – rekire
+0
我在研究MySQL存儲時發現了這些信息。這是在MySQL DBA博客 – 2013-06-06 05:12:06
+0
@PeterVenderberghe中提到的一個好的... – 2013-06-06 05:14:13
相關問題
- 1. MongoDB數據庫中的數據如何存儲在磁盤上?
- 2. MySQL的varchar數據類型..如何獲取存儲在磁盤
- 3. Apache Cassandra磁盤上的數據存儲
- 4. 加密Mysql數據庫存儲在磁盤上的文件
- 5. 如何將JSON數據存儲在磁盤上?
- 6. 數據如何存儲在磁盤上? - EFI GUID
- 7. 數據庫記錄如何存儲在磁盤上?
- 8. RavenDB Embedded:存儲在磁盤上的數據在哪裏?
- 9. RDFlib'磁盤'存儲
- 10. RavenDB磁盤存儲
- 11. 將會話存儲在磁盤上
- 12. Django:在磁盤上存儲InMemoryUploadedFile
- 13. 在磁盤或MongoDB上存儲文件
- 14. 如何將存儲過程的輸出存儲到磁盤上
- 15. 如何根據磁盤路徑確定數據存儲?
- 16. 將未使用的類數據成員存儲在磁盤上
- 17. MongoDB - 在磁盤上存儲SSD和數據收集索引?
- 18. Spark shuffle爲什麼在磁盤上存儲中間數據?
- 19. MySQL的performance_schema數據庫中的信息是否存儲在磁盤上?
- 20. SQL Server 2014如何使用磁盤空間來存儲數據
- 21. MySQL查詢在磁盤上
- 22. 如何System.Windows.Controls.Image存儲到本地磁盤
- 23. 如何將對象存儲到磁盤?
- 24. 磁盤上的數據庫存儲,最佳實踐
- 25. 磁盤上的InfluxDB存儲大小
- 26. 磁盤上的JackRabbit存儲庫
- 27. 如何將磁盤大小配額放在git存儲庫上?
- 28. CouchDB中的視圖如何存儲在磁盤上?
- 29. 如何擴展未存儲在磁盤上的Jade模板?
- 30. 如何在磁盤上存儲大型圖形
這個問題值得一些真正的好研究,而不僅僅是一個問題答案會話,可能更適合於http://dba.stackexchange.com –
「Pro MySQL」這本書對此過程進行了相當徹底的解釋。 – Marty
恕我直言,這取決於您使用的MyISSAM和InnoDB結構的存儲引擎是安靜的不同。然而AFIK的所有使用D或KD樹(我不知道K現在)。 – rekire