gpt4 book ai didi

mysql - 以下查询的优化

转载 作者:行者123 更新时间:2023-11-29 08:15:34 24 4
gpt4 key购买 nike

我有数据库表 IPv4:

id          int(11) PK
ip bigint(10)
mask bigint(10)
broadcast bigint(10)

我正在尝试对 IP 地址进行文本搜索,例如用户输入 83.1.1.1/24,然后使用以下查询进行搜索:

SELECT `ip`, `broadcast` 
FROM `IPv4`
WHERE
CONCAT(INET_NTOA(`ip`), "/", BIT_COUNT(`mask`)) LIKE '%:searchStr%'

然后我想获取找到的IP地址的路径(层次树):

SELECT DISTINCT `id` FROM `IPv4` WHERE (ip <= :ip) AND (broadcast > :broadcast)

是否可以在一个查询中完成所有这些操作?

编辑

向前移动:

SELECT DISTINCT t2.id
FROM (
SELECT ip, broadcast
FROM IPv4
WHERE CONCAT( INET_NTOA( `ip` ) , "/", BIT_COUNT( `mask` ) ) LIKE '%:searchStr%'
) AS t1

INNER JOIN IPv4 t2
WHERE t2.ip <= t1.ip AND t2.broadcast >= t1.broadcast
ORDER BY t2.mask

这可以完成工作,也许甚至更好?

最佳答案

当您使用 inet_ 存储 ip 和掩码后,您可以使用 & 运算符来比较它们吗?

ip = inet_ntoa( '192.168.100.12' )
mask = inet_ntoa( '255.255.255.0' )

ip & mask == inet_ntoa( '192.168.100.1' ) & inet_ntoa( '255.255.255.0' )

匹配时应返回 true。

http://databaseblog.myname.nl/2011/07/working-with-ips-in-mysql-and-mariadb.html

关于mysql - 以下查询的优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20680852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com