Pg数据库的IP地址最优查询

pg有专门的IP数据类型 inet,可直接对字段操作,>=,<=IP地址搜索

为了提高搜索速度,需要建索引

  • Btree索引(最快

btree (ip_start, ip_end)+加上order by ip_start desc limit 1;前提条件:表里IP范围不能重叠,一个IP只能查一条记录;所有IP都能查到,不然会扫描一半的索引;

因为表里ip范围是不重叠的。基本上ip_start小于等于目标ip的最大的记录就是了,这时候用btree索引有序的特性只要取一条记录。

同样的SQL有多种不同的执行方式,优化器选它认为最佳的执行计划。有order by limit的SQL更偏向于: 从索引里按顺序取记录再评估记录是否满足条件

CREATE INDEX "a" ON "public"."ip_idc" USING btree (
  "ip_start",
  "ip_end"
);

select * from ip_idc where ip_start <='113.201.214.203'::inet and ip_end >='113.201.214.203'::inet order by ip_start desc limit 1;
  • gist索引查询inetrange,建议PG10版本以上,性能最好
create table idc(ip_start inet,i
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值