MySQL - 库表设计之IP和TIMESTAMP的处理
文章目錄
- 學習更多干貨
- Pre
- TIMESTAMP
- IP
- 總結(jié)
學習更多干貨
帶你搞定MySQL實戰(zhàn),輕松對應海量業(yè)務處理及高并發(fā)需求,從容應對大場面試
Pre
MySQL - 高效的設計MySQL庫表
設計指導思想和注意事項都梳理了一下,那來個小練習把
TIMESTAMP
我們使用 MySQL 內(nèi)置的函數(shù)(FROM_UNIXTIME(),UNIX_TIMESTAMP()),可以將日期轉(zhuǎn)化為數(shù)字,用 INT UNSIGNED 存儲日期和時間
示例
時間 2020-08-17 22:22:22 與整數(shù)之間的轉(zhuǎn)換,轉(zhuǎn)化后數(shù)字是連續(xù)的,占用空間更小,并且可以使用索引提升查詢性能。
mysql> select UNIX_TIMESTAMP('2020-08-17 22:22:22'); +---------------------------------------+ | UNIX_TIMESTAMP('2020-08-17 22:22:22') | +---------------------------------------+ | 1597674142 | +---------------------------------------+ 1 row in setmysql> select FROM_UNIXTIME(1597674142); +---------------------------+ | FROM_UNIXTIME(1597674142) | +---------------------------+ | 2020-08-17 22:22:22 | +---------------------------+ 1 row in setmysql> mysql> select UNIX_TIMESTAMP(now()); +-----------------------+ | UNIX_TIMESTAMP(now()) | +-----------------------+ | 1597674191 | +-----------------------+ 1 row in setmysql> select FROM_UNIXTIME(1597674191); +---------------------------+ | FROM_UNIXTIME(1597674191) | +---------------------------+ | 2020-08-17 22:23:11 | +---------------------------+ 1 row in setmysql>IP
-
一般使用 Char(15) 進行存儲,但是當進行查找和統(tǒng)計時,字符類型不是很高效。
-
MySQL 數(shù)據(jù)庫內(nèi)置了兩個 IP 相關的函數(shù) INET_ATON()、INET_NTOA(),可以實現(xiàn) IP 地址和整數(shù)的項目轉(zhuǎn)換。
因此,我們使用 INT UNSIGNED(占用 4 個字節(jié))存儲 IP,非 Char(15)。占 15 個字節(jié)。
mysql> select INET_ATON('127.0.0.1'); +------------------------+ | INET_ATON('127.0.0.1') | +------------------------+ | 2130706433 | +------------------------+ 1 row in setmysql> select INET_NTOA(2130706433); +-----------------------+ | INET_NTOA(2130706433) | +-----------------------+ | 127.0.0.1 | +-----------------------+ 1 row in setmysql>將 IP 的存儲從字符型轉(zhuǎn)換成整形,轉(zhuǎn)化后數(shù)字是連續(xù)的,提高了查詢性能,使查詢更快,占用空間更小。
總結(jié)
以高性能為目標,庫表設計以范式為主,根據(jù)特殊業(yè)務場景使用反范式,允許必要的空間換時間。
規(guī)范數(shù)據(jù)庫的使用原則,統(tǒng)一規(guī)范命名,減少性能隱患,減少隱式轉(zhuǎn)換。
高性能表設計的原則:合適的字段、合適的長度、NOT NULL。
從不同角度思考 IP、timestamp 的轉(zhuǎn)換,拓寬設計思路。
規(guī)范的命名可提高可讀性,反范式設計可提高查詢性能。
總結(jié)
以上是生活随笔為你收集整理的MySQL - 库表设计之IP和TIMESTAMP的处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL - 高效的设计MySQL库表
- 下一篇: linux cmake编译源码,linu