Mysql

是否可以在不同的驅動器上擁有一個表及其索引?

  • May 5, 2021

我正在執行具有 HDD 和 SSD 內部驅動器的 Ubuntu MySQL 伺服器。HDD 具有更大的容量,但 SSD 的讀/寫速度當然要快得多。

我是否有可能持有一個(25 億條記錄並且還在增長)表,並為它建立一個索引,索引在 SSD 驅動器上?我認為這可能使我能夠利用可用的巨大 HDD 儲存空間,但可以通過 SSD 提高索引讀取速度。

我已經線上閱讀了很多 MySQL 文件,但找不到相關頁面。我在某處聽說這是可能的!

任何幫助,非常感謝。我被限制使用 MySQL,我不能安裝其他數據庫系統或更改伺服器。

為什麼不能分開

使用ENGINE=InnoDB,數據的 BTree(按 排序PRIMARY KEY)和所有二級索引(同樣是 BTree)儲存在同一個“表空間”中。

表空間被實現為文件。因此,不可能將它們分開。(MyISAM 不同,但我們不要去那裡。)

表空間以 3 種方式之一表現出來,這些方式都不能幫助您解決問題:

  • “系統”表空間ibdata1。實際上可以有多個文件,但是您無法控制哪些塊進入哪個文件。
  • 一個.ibd表(及其索引)的文件。參照innodb_file_per_table
  • 使用者生成的“表空間”。

而且沒有優勢

為什麼要拆分索引和數據?即使使用不同的速度驅動器,它也基本上是無用的。

  • 當查詢使用索引時,它將首先使用索引然後使用數據——從而(通常)使處理“序列化”。這是反對從兩個相同速度的磁碟驅動器上的數據拆分索引的合理論點。
  • 所有塊——數據或索引——都記憶體在 RAM 的 buffer_pool 中。索引通常更小,因此更容易記憶體,因此更可能位於 RAM 中,而與磁碟位置無關。

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