我使用 inet_aton 将 IPv4 地址存储在“int unsigned”列类型中。 [我这样做对吗?是否需要使用“unsigned”?] 这个特定的列也被索引了。由于在整个表中将有数百万行和多行包含相同的 IP,搜索这些行的最快方法是什么?
..还是我用错了方法?
最佳答案
使用 inet_aton 是执行此操作的正确方法,因此您不会存储额外的无意义信息(对于任何给定的 3 个数字,能够存储大于 256 的值毫无意义)。它会产生一个 32 位数字,适合 unsigned int。
在 int 列上建立索引将使通过 IP 地址进行快速查找。如果您的数据库变得非常大,您将开始遇到在 MySQL 中存储此类内容的扩展问题。
我假设您不会这样做,但会指出在 RDBMS 中存储大型繁忙站点的完整日志信息通常被认为是一件坏事 (tm)。您不需要数据库保证的关系完整性属性,并且您写入的条目比读取的条目多得多。考虑使用 nosql,或附加到平面文件,并在必要时使用专用程序解析您的日志。
关于PHP:在 MySql 中存储 IP 的正确方法和在数百万行中搜索 IP 的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3980489/