mysql中ip的存取设计

场景设计,数据库如何存一个ip地址,如何设计索引和算法准确的查找一个ip与某个范围内的ip

1.创建表及相关索引

create table iptable
(
Ino int(10) PRIMARY key auto_increment,
Iadress int(10)
)

alter table iptable add index adress_index(Iadress)

insert into iptable(Iadress) VALUES (1234567890),(1234567891)

创建了一个iptable表,在Iadress上建立了索引并插入了两条数据(1234567890与1234567891分别对应点分十进制的73.150.2.210与73.150.2.211)。


2.mysql内置函数inet_ntoa()与inet_aton()

介绍两个mysql中处理ip地址的内置函数
inet_ntoa()函数:将整数转成IP地址;
inet_aton()函数:将IP地址转成整数;


3.使用inet_ntoa()与使用inet_aton()查询指定ip的执行效率比较

3.1 使用inet_ntoa()
EXPLAIN select * from iptable where INET_NTOA(Iadress) = '73.150.2.210'

执行结果分析

通常在对索引列应用函数或表达式会使索引失效,但观察key字段发现依旧使用了索引,但是type为index,查询效率很低。

3,2 使用inet_aton()
EXPLAIN select * from iptable where Iadress = INET_ATON('73.150.2.210')

结果分析
这里我们使用Inet_aton将要查找的点分十进制的ip地址转化为整数,可以看到使用了建立在Iadress上的索引,type也变成了ref,查询效率得到了很大的提升(一般查询效率达到ref级别就不会称为性能瓶颈)


查询某个范围内的ip

查询指定范围的ip,无论使用inet_ntoa()还是inet_aton(),type均为type,那么有办法提升指定范围内ip的查询效率么?(待补充)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值