您好,正在处理内部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的网络前端,通过IP,范围,DNS或评论进行搜索,如下所示。
表格抓取搜索查询并以$q
传递给PHP脚本。爆炸作为一个数组,jiggery pokery,以便它可以用作" LIKE OR"循环并将编辑后的数组内爆为$searchterms
。
示例:
$q = "test search term"
$searchterms = "%test% OR comment LIKE %search% OR comment LIKE %term%"
最终搜索查询是:
SELECT * FROM ips WHERE ipaddress LIKE '%" . $q . "%' OR rdns LIKE '%" . $q . "%' OR comment LIKE '" . $searchterms . "' OR rangeaddress LIKE '%" . $q . "%';"
这是搜索这么多列的最佳方式,还是有更好的方法?
谢谢,
奥利弗
答案 0 :(得分:0)
1)避免在条件适用的地方使用'like'子句。这样,db只能扫描所有记录,而不是扫描索引。
2)为了在不失去灵活性的情况下提高性能,您可以分割可能出现在where子句中的字段。 以'ipaddress'为例,存储四个独立的部分而不是一个字符串。然后,解析并转换用户的查询字符串。
如果有人想查询“192.168。*”,最终条件应该是'part1 = 192 and part2 = 168';
如果有人想查询“192.16 *”,最终条件应该是'part1 = 192,part2在16到169之间'。
解析算法越复杂,您就可以提供更大的灵活性。