我正在使用 PostgreSQL 的 MPP 版本,它从 8.3 分叉出来。
我正在尝试使用 where 子句优化选择语句,以仅选择具有私有源 IP 地址和公共目标 IP 地址的行。我有两列 inet 类型,称为 source_ip 和 destination_ip。我觉得以下操作不是最有效的做事方式,因为我正在做一个正则表达式匹配来确定一个 IP 是公共的还是私有的:
where (text(source_ip) like '10.%'
or text(source_ip) like '192.168.%'
or text(source_ip) ~ E'^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..+')
and text(destination_ip) not like '10.%'
and text(destination_ip) not like '192.168.%'
and text(destination_ip) !~ E'^172\.((1[6-9])|(2[0-9])|(3[0-1]))\..+';
如何使上述 where 子句更有效?有没有办法不使用正则表达式并使用内置的 postgresql 函数以更快的方式对 inet 类型进行操作?