Mysql
MySql:將 DATETIME 類型的列轉換為 DATE 是否值得?
在項目開始時,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%。即在大多數情況下,您無法預測實際儲存大小的變化。