我正在使用inet_aton存储IPv4地址。 [我在做这件事吗?并且是否使用“无符号”吗?]此特定列也是索引的。由于整个表中将有数百万的行和多个行包含相同的IP,这将是搜索这些行的最快方法?

..还是我以错误的方式进行操作?

有帮助吗?

解决方案

我在做这件事吗?并且使用“未签名”?

是的。没有 unsigned 更高的IP地址将无法正确存储并使用 int (代替 varchar)最有效地存储它。

搜索这些行的最快方法是什么?

至于搜索优化,这取决于您要搜索的内容(附加表等)。通常,索引无签名的int列可为您提供快速的性能。

其他提示

使用inet_aton是正确的方法,因此您不会存储额外的毫无意义的信息(对于任何给定的3个数字,能够存储大于256的值没有意义)。它导致32位数字,将适合未签名的INT。

在int列上索引将快速通过IP地址进行查找。如果您的数据库确实很大,您将开始遇到缩放问题,以在MySQL中存储此类内容。

我假设您不会这样做,但会指出,在RDBMS中存储一个大型繁忙网站的完整日志信息通常是一件坏事(TM)。您不需要数据库保证的关系完整性属性,并且编写比阅读更多的条目。考虑NOSQL或附加到平面文件,并在必要时使用专用程序在日志中解析。

是的,这是将IP地址存储在MySQL中的最佳方法。

如果您查看文档的 inet_aton 您可以看到建议使用未签名的int列或任何IP地址(与第一个Octed超过127)的任何IP地址不会正确存储。

这也是进行搜索的非常快的方法。 MySQL可以很好地处理整数列,并且通过索引此列并在搜索中使用inet_aton,您可以实现非常快的查询。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top