日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

MySQL - 库表设计之IP和TIMESTAMP的处理

發(fā)布時間:2025/3/21 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL - 库表设计之IP和TIMESTAMP的处理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 學習更多干貨
  • 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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。