Mysql

MySql:將 DATETIME 類型的列轉換為 DATE 是否值得?

  • April 3, 2020

在項目開始時,DATETIME 列是有意義的。但是現在,5年過去了,requierments改變了時間部分就再也沒有用過了。

我的表大約有 100k 行,並且每月增長約 500 行。

將 DATETIME 類型的列轉換為 DATE 是否值得?

  • 我的意思是,與 DATE 欄位相比,DATETIME 欄位的大小是否更大?
  • 列轉換後可以節省一些磁碟空間嗎?
  • 數據庫在 DATE 欄位中搜尋是否更快?

我正在使用 MySQL 5.7

我的意思是,與 DATE 欄位相比,DATETIME 欄位的大小是否更大?

確實如此。DATE 需要 3 個字節,DATETIME 需要 5-8 個字節。

數據庫在 DATE 欄位中搜尋是否更快?

在大多數情況下,差異低於測量精度。

列轉換後可以節省一些磁碟空間嗎?

我懷疑。集群效應。row_size 越大,表文件大小發生變化的可能性就越小。

近似解釋(不准確,僅想法)。

數據不是以流的形式儲存在表文件中,而是以塊的形式儲存。一個塊中有一些百分比範圍的數據填充 - 當實際百分比從中出來時,塊會拆分或連接。

想像一下

  • 塊大小為 16 KB = 16384 字節
  • 記錄大小為 100 字節
  • 百分比範圍為 40-80%,平均 60%

一般來說,塊儲存 (16384 * 60%) / 100 = 98 條記錄。

我們將不帶小數部分(5 個字節)的 DATETIME 更改為 DATE(3 個字節)。新記錄大小為 100 - 5 + 3 = 98 字節。

因此,該塊​​現在平均儲存 (16384 * 60%) / 98 = 100 條記錄。

區塊數量僅減少 2%。考慮到百分比範圍變化兩次,文件大小減少的機率比增加的機率高 2%。即在大多數情況下,您無法預測實際儲存大小的變化。

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