Mysql 性能:IP 直接作为 BINARY 或通过引用

Posted

技术标签:

【中文标题】Mysql 性能:IP 直接作为 BINARY 或通过引用【英文标题】:Mysql Performance: IP direct as BINARY or via reference 【发布时间】:2013-11-05 20:48:42 【问题描述】:

我在一个表中有一个日志,每月有 420000 个条目。我需要经常检查其中的许多条目,所以 select 应该在这张桌子上运行得很快。这些表中的所有值都是 int(4),但 IP 地址是二进制 (4)。

最好创建一个额外的 IP-Table 并且只在日志表中存储 ip 的 id 或者 BINARY 比较这么快 INT 如何比较?

【问题讨论】:

【参考方案1】:

IPv4 编号实际上可以与 int 互换,这意味着您可以将 int 转换为 IP 地址,反之亦然,而不会丢失数据(int 长度为 4 个字节)。所以你不应该真的需要这个带有“ids”的附加表。

回答您的主要问题:将 IP 存储为 int 应该更快 - 您可以自己执行测试并收集准确的统计数据。

话虽如此,我对您的数据模型几乎没有疑问。首先是您是否存储 Internet IP 地址?如果是这样,您还应该考虑存储 IPv6 地址。另一件事是您提到您将经常查询此表(期望选择运行快速),同时每分钟插入约 233 条记录。我不知道您将使用哪个引擎,但使用 InnoDb 可能无法正常工作 - 您会遇到锁定问题。避免这种情况的一种方法是根据时间对数据进行分区并查询当前未使用的分区。还要小心索引,因为有许多索引会减慢您的插入速度。您可能还有一个用于插入的单独表和用于选择的分区索引繁重的表。您可以在插入率较低时在它们之间移动数据。你怎么看?

【讨论】:

以上是关于Mysql 性能:IP 直接作为 BINARY 或通过引用的主要内容,如果未能解决你的问题,请参考以下文章

Redhat Linux上mysql安装-binary package安装

有没有办法直接访问 MariaDB 或 MySQL 表索引?

高性能MySQL:字符串类型(2)

如何把阿里云或腾讯云服务器作为代理ip上网?

处理 mysql 数据库连接

Mysql中文排序