gpt4 book ai didi

MySQL 有效搜索多列(很多行)

转载 作者:行者123 更新时间:2023-11-30 00:08:58 25 4
gpt4 key购买 nike

您好,正在研究内部 IP 地址分配数据库。我知道有开源选项,但想从头开始制作自己的选项。我想知道我的搜索方式是否是最好的方式,因为将有 10000 条记录可供搜索。

表结构如下:

+-------------+------------------------------+------------------+---------------------+----------------+
| ipaddress | rdns | comment | modified | rangeaddress |
+-------------+------------------------------+------------------+---------------------+----------------+
| 192.168.13.37 | something.internal.doman | Networks NAT | 2014-06-16 14:52:29 | 192.168.13.0/24

用户交互是通过使用 PHP 的 Web 前端进行的,搜索是通过 IP、范围、DNS 或注释完成的,如下所示。

表单抓取搜索查询并以 $q 形式传递给 PHP 脚本。作为数组爆炸,进行 jiggery pokery,以便它可以用作“LIKE OR”循环,并将编辑后的数组爆炸为 $searchterms

示例:

$q = "测试搜索词"
$searchterms = "%test% 或评论如 %search% 或评论如 %term%"

最终搜索查询是:

SELECT * FROM ips WHERE ipaddress LIKE '%" . $q . "%' OR rdns LIKE '%" . $q . "%' OR comment LIKE '" . $searchterms . "' OR rangeaddress LIKE '%" . $q . "%';"

这是搜索这么多列的最佳方式吗?还是有更好的方式?

谢谢

奥利弗

最佳答案

1) 避免在 where 条件中使用“like”子句。这样db就只能扫描所有记录,而不能扫描索引。

2)为了提高性能而不失去灵 active ,您可以拆分可能出现在where子句中的字段。以“ipaddress”为例,存储四个独立的部分而不是单个字符串。然后,解析并转换用户的查询字符串。

如果有人想查询“192.168.*”,最终条件应该是“part1=192 and part2=168”;

如果有人想查询“192.16*”,最终条件应该是“part1=192 and part2 Between 16 to 169”。

解析算法越复杂,您可以提供的灵 active 就越大。

关于MySQL 有效搜索多列(很多行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24245853/

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