Mysql
為什麼使用 innodb_file_per_table?
有很多文章誇大了(當然是恕我直言)對
innodb_file_per_table
. 我了解,使用innodb_file_per_table
應該可以更好地控制各個表;像單獨備份每個表。然而,關於更好性能的說法是有問題的。
innodb_file_per_table
在我的測試中,ibdata1
60GB 的數據庫的性能沒有差異。當然,這是一個普通查詢的簡單測試,現實生活中復雜查詢的情況可能會有所不同(這就是我問這個問題的原因)。64位linux配合ext4
可以有效處理大文件。有了
innodb_file_per_table
,需要更多的磁碟 I/O 操作;這在復雜JOIN
的 s 和FOREIGN KEY
約束中很重要。表空間在單個上共享
ibdata
;單獨表的專用表空間如何節省磁碟空間?當然,使用 為每個表釋放表空間更容易ALTER
,但它仍然是一個昂貴的過程(使用表鎖)。問題:
innodb_file_per_table
對mysql的更好性能有影響嗎?如果是,為什麼?
我認為這不是績效問題,而是管理問題。
例如,通過每個表單獨的文件,您可以將不同的數據庫儲存在不同的儲存設備中。
您可以處理無法處理大文件的文件系統中非常大的數據庫的情況(至少將問題推遲到一個表達到文件大小限制)。
您沒有不受控制的表空間增長。如果您刪除了一些大表,則
ibdata
文件將保持較小。可能對性能產生一些影響的一個方面是表數據和索引的碎片,每個表都會受到限制。但這需要測試來確認。