【发布时间】:2013-07-10 07:44:38
【问题描述】:
我的项目的一部分涉及在我的数据库中存储和检索大量 ips。我估计在项目启动后的几个月内我的数据库将拥有数百万个 ip。既然如此,我想知道对大型数据库的简单查询有多慢?以下查询的大致速度是多少:
SELECT * FROM table where ip= '$ip' LIMIT 1
INSERT INTO table(ip, xxx, yyy)VALUES('$ip', '$xxx', '$yyy')
在有 2.65 亿行的表上?
我是否可以通过创建 255^2 个表来加快查询速度,这些表的名称对应于所有可能的 ipv4 ip 地址的所有前两个数字,然后每个表最多有 255^2 行可以容纳所有ip的可能第二部分。因此,例如要查询 IP 地址“216.27.61.137”,它将被分成两部分,“216.27”(p1)和“61.137”(p2)。首先,脚本会选择名称为 p1 的表,然后它会检查是否有任何名为“p2”的行,如果有,它将从该行中提取所需的数据。将使用相同的过程将新的 ips 插入到数据库中。
如果上述计划不起作用,那么在大型数据库中加快查询速度的好方法是什么?
【问题讨论】:
-
阅读 MySQL 中的
INDEXs。 -
使用 IPv4 地址的字符串表示会比使用
UNSIGNED INT慢很多。对于 IPv6 兼容性,您会被字符串困住,而且它们会更长。分片在这里不是一个坏主意,但前提是你会有插入争用。值得注意的是,Postgres 支持IP addresses as a native column type。 -
mysql 不是唯一的开源关系数据库管理系统
标签: php mysql database ip bigdata