Mysql 如何高效儲存IPv4 位址

2021-09-30 01:17:11 字數 2350 閱讀 1396

在mysql儲存資料時,我們需要優先考慮資料的型別和資料容量以及最重要的是資料使用時的效能問題。

所以我們應該盡量選擇可以正確儲存資料的最小資料型別。最小的資料型別通常占用更少的磁碟、記憶體和cpu快取,而且處理時需要的cpu週期也更少。

人們經常使用varchar(15) 來儲存ip 位址,然而,它們實際是32位無符號整數,不是字串。用小數點分成4段表示方法只是為了閱讀容易。所以應該用無符號整數儲存ip位址。

以下內容採自《mysql高效能書籍》第四章節

mysql中整型有很多種: tinyint , smallint , mediumint, int ,bigint 。 分別使用8 ,16 ,24,32,64 位儲存空間。可以儲存的值的範圍從-2^(n-1) 到 2^(n-1)-1 ,其中n是儲存空間的位數。

整數型別有可選的unsigned 屬性,表示不允許負值,這可以使得整數的上限提高一倍。例如 tinyint  unsigned可以儲存的範圍是0~255 , 而 tinyint的儲存範圍是 -128 ~127

有符號和無符號型別使用的相同的儲存空間,並具有相同的效能,因此可以根據實際情況選擇合適的型別。

整數計算一般使用64位的bigint 整數,即時是在32位環境也是這樣。

mysql可以為整數型別指定寬度,例如 int(11), 這對大多數應用是沒有意義的。這是不會限制值的合法範圍,只是規定了mysql 的一些互動工具(例如mysql命令列客戶端)用來顯示字元的個數。對於儲存和計算來說,int(1) 和 int(20) 是相同的。

-- create table

drop table t_ip;

create table `t_ip` (

`id` bigint(20) not null auto_increment,

`ip_address` varchar(15) not null comment 'ip位址',

`ip_address_num` bigint(1) not null comment 'ip num',

primary key (`id`)

) engine=innodb auto_increment=17 default charset=utf8 ;

-- insert data

insert into t_ip(ip_address , ip_address_num)

values

( '192.168.0.1' , inet_aton('192.168.0.1')) ,

( '192.168.0.2' , inet_aton('192.168.0.2')) ,

( '192.168.0.3' , inet_aton('192.168.0.3')) ,

( '192.168.0.4' , inet_aton('192.168.0.4')) ,

( '192.168.0.5' , inet_aton('192.168.0.5')) ,

( '192.168.0.6' , inet_aton('192.168.0.6')) ,

( '192.168.0.7' , inet_aton('192.168.0.7')) ,

( '192.168.0.8' , inet_aton('192.168.0.8')) ,

( '12.68.0.1' , inet_aton('12.68.0.1')) ,

( '12.68.0.2' , inet_aton('12.68.0.2')) ,

( '12.68.0.3' , inet_aton('12.68.0.3')) ,

( '12.68.0.4' , inet_aton('12.68.0.4')) ,

( '12.68.0.5' , inet_aton('12.68.0.5')) ,

( '12.68.0.6' , inet_aton('12.68.0.6')) ,

( '12.68.0.7' , inet_aton('12.68.0.7')) ,

( '12.68.0.8' , inet_aton('12.68.0.8'));

-- demo select

select *,inet_ntoa(ip_address_num) as formatip from t_ip

where ip_address_num > inet_aton('192.168.0.3')

and ip_address_num < inet_aton('192.168.0.10');

IPv4單播位址

ipv4單播位址標識網路中的乙個介面的位置,就像用街道位址標識城市街區的房子一樣。正如乙個街道位址必須能夠標識乙個唯一的住所一樣,ipv4單播位址也必須是全域性唯一的,而且要採用一種統一的格式。1.單播位址的組成 每個ipv4單播位址包括乙個網路id和乙個主機id。l 網路id 又稱網路位址 它是i...

IPv4資料報結構

目錄 一 ip包頭 1 涵義詳解 1 ip大小範圍 2 第一行 32bit 3 第二行 32bit 4 第三行 5 第四行 6 第五行 7 第六行 二 tcp報頭 三 udp報頭 當options 0時,1行是4位元組 共4 5 20位元組 當ihl 1111 15 時,15 4 60位元組 所以i...

IPv4位址的儲存與查詢

ipv4的位址實際上是乙個4位元組的資料。點分十進位制的字串表示是為了人工讀寫方便,但範圍比較則是原始二進位制形式方便。因此需要實現二者的相互轉換 測試資料 create table ips strip varchar 15 null binip binary 4 null go insert in...