我在一个表中有一个日志,每月获得 420000 个条目。我需要经常检查其中的许多条目,所以 select 应该在这张桌子上运行得很快。这些表中的所有值都是 int(4),但 IP 地址是二进制 (4)。
最好创建一个额外的 IP-Table 并且只在日志表中存储 ip 的 id 或者 BINARY 比较这么快 INT 如何比较?
我在一个表中有一个日志,每月获得 420000 个条目。我需要经常检查其中的许多条目,所以 select 应该在这张桌子上运行得很快。这些表中的所有值都是 int(4),但 IP 地址是二进制 (4)。
最好创建一个额外的 IP-Table 并且只在日志表中存储 ip 的 id 或者 BINARY 比较这么快 INT 如何比较?
IPv4 编号实际上可以与 int 互换,这意味着您可以将 int 转换为 IP 地址,反之亦然,而不会丢失数据(int 长度为 4 个字节)。所以你不应该真的需要这个带有“ids”的附加表。
要回答您的主要问题:将 IP 存储为 int 应该更快 - 您可以自己执行测试并收集准确的统计数据。
话虽如此,我对您的数据模型几乎没有疑问。首先是您是否存储 Internet IP 地址?如果是这样,您还应该考虑存储 IPv6 地址。另一件事是您提到您将经常查询此表(期望选择运行快速),同时每分钟插入约 233 条记录。我不知道您将使用哪个引擎,但使用 InnoDb 可能无法正常工作 - 您会遇到锁定问题。避免这种情况的一种方法是根据时间对数据进行分区并查询当前未使用的分区。还要小心索引,因为有许多索引会减慢您的插入速度。您可能还有一个用于插入的单独表和用于选择的分区索引繁重的表。您可以在插入率较低时在它们之间移动数据。你怎么看?