在 MySQL InnoDB 中,COMPRESSED, COMPACT 和DYNAMIC 有什么區別?


在 MySQL InnoDB 中,COMPRESSED, COMPACT 和DYNAMIC 有什么區別?

 

 

In MySQL InnoDB, what is the difference between COMPRESSED, COMPACT and DYNAMIC for ROW_FORMAT?

What are the benefits between each other?

在 MySQL InnoDB 中,COMPRESSED, COMPACT 和DYNAMIC對於用戶來說ROW_FORMAT?彼此之間有什么好處?

 

COMPACT is format supported by Antilope. It stores first 768 bytes of BLOB in case its value doesn't fit in page.

DYNAMIC is almost the same as COMPACT except only 20 bytes for each BLOB field is used. Benefits - more BLOB fields are possible in a record.

COMPRESSED is used for compressed tables. Hence its benefits.

COMPACT 的格式由 Antilope 支持。它存儲前 768 個字節的 BLOB,以防其值不適合頁面。

DYNAMIC 與 COMPACT 幾乎相同,但每個 BLOB 字段僅使用 20 個字節。優勢 - 記錄中可能有更多的 BLOB 字段。

壓縮用於壓縮表。因此,它的好處。

 

 

使用 DYNAMIC 或壓縮意味着 InnoDB 存儲完全在頁面外不合的頁面中的 varchar/文本/blob 字段。但是,除了那些列(每個列只計數 20 個字節)以外的,InnoDB 行大小限制沒有改變;它仍然限制在每行約 8000 個字節。

InnoDB 僅支持每列 767 字節的索引。您可以通過設置和使用動態或壓縮行格式來提高此 3072 字節。innodb_large_prefix=1

使用壓縮行格式不會使 InnoDB 支持更長的索引。

關於性能,這是"視情況而定"的情況之一。壓縮通常是在存儲大小和 CPU 負載之間權衡以壓縮和取消壓縮。的確,使用壓縮數據需要多一些 CPU,但您必須記住,數據庫服務器通常在等待 I/O,並且有 CPU 資源需要備用。

但並非總是 -- 如果對緩沖池中的數據進行復雜查詢,則可能受 CPU 限制超過 I/O。因此,這取決於許多因素,例如數據在 RAM 中的擬合程度、運行的查詢類型、秒查詢數以及硬件規格。太多因素,其他人無法回答您的服務器上的應用程序。你只需要測試它。

重新評論:

一種可能性是索引不適合緩沖池。如果索引搜索需要在每次 SELECT 查詢期間加載頁面並逐出頁面,則性能會顯著降低。解釋分析無法告訴您索引是否適合緩沖池。

我不知道索引中列的列數或數據類型,但如果對長 varchar 列編制索引,則應考慮使用前綴索引(或減少列的長度)。

您還可以獲得更多 RAM 並增加緩沖池的大小。

 

 

COMPRESSED:將壓縮數據。文本會壓縮得很好。我有幾個表, 以前用DYNAMIC, 移動到COMPRESSED。

我使用 Mysql 5.7

表:

  • id (int)
  • some_other_id (國際)
  • 文本(長文本) -  utf8mb4_unicode_ci 500KB/ 行平均值
  • updated_at (國際)
  • created_at (國際)

     

與動態相比,壓縮占用的空間減少 80%。之前: 80gb, 之后: 16gb巨大的保存, 而我不需要這么多的數據。

其他表並沒那么戲誇張,但它保存了 +50%的地方有一些文本字段。例如,另一個從 6.4Gb -> 3.1Gb 與 1.5M 行。

我還沒有更改為壓縮較小的表,大多保存整數/位和類似。這些表的空間已經很小,因此無需為它們使用更多的 CPU。

 

總結來源:Internet

 

文章來源:劉俊濤的博客 歡迎關注公眾號、留言、評論,一起學習。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM