Partitioning

在 MySql 8 中我可以/應該擁有的每個表的最大分區數是多少?

  • July 15, 2019

我有大約 1T (1,000,000,000) 條屬於 500,000 個帳戶的產品記錄。每個產品記錄都有 account_id,因為我總是在單個帳戶上下文中查詢(沒有跨帳戶查詢),所以我想為每個帳戶創建一個分區以提高性能。

  1. 甚至可以在 mysql8 中創建 500,000 個列表分區嗎?
  2. 是否需要更改該過程所需的打開文件數量?
  3. 如果可能,我有理由不走這條路嗎?

MySQL 8 中 InnoDB 表允許的最大分區數為 8192(來自https://dev.mysql.com/doc/refman/8.0/en/partitioning-limitations.html)。這包括子分區。

通常,分區本身並不能提高性能,但在某些情況下它們可以提供幫助:

  • 二級索引是分區本地的,因此,例如,如果您一次(或按順序)批量插入數據一個分區,則二級索引更有可能適合緩衝池,從而提高插入性能。
  • 用於分區修剪。例如,這可能意味著 MySQL 有效地為同一個表使用兩個索引,而無需進行索引合併。
  • 管理邏輯分組數據,例如將屬於一個分區的所有數據移動到另一個表(例如將其移動到另一個 MySQL 實例)或刪除一個分區中的所有數據。

如果一個表有很多分區,需要注意的一件事是,預設情況下每個分區都有自己的表空間文件(.ibd 文件)。因此,如果您有 8192 個分區,則該表最終將使用 8192 個文件。

引用自:https://dba.stackexchange.com/questions/239074