用百万行更新MySQL表

时间:2012-02-25 03:30:02

标签: php mysql mysql-management

我需要通过INET_ATON()转换ip 在mysql表中有数百万行

UPDATE `table` SET `ip` = INET_ATON(`ip`)

我需要查询才能获得快速且良好的性能

谢谢

2 个答案:

答案 0 :(得分:1)

好吧,您似乎正在尝试为char列分配数值。正如MichaelH所说,如果您要使用的数值超过地址值,那么您应该考虑以该格式存储数字。

但是,您可以存储这两个值以提高查询性能:

CREATE TABLE t (
  address char(15),
  number  int unsigned default 0
);

INSERT INTO t (address) VALUES
('255.255.255.255'),
('0.0.0.0'),
('1.0.0.0');

update t set number = inet_aton(address);
select * from t;

这将导致:

+-----------------+------------+
|     ADDRESS     |   NUMBER   |
+-----------------+------------+
| 255.255.255.255 | 4294967295 |
| 0.0.0.0         |          0 |
| 1.0.0.0         |   16777216 |
+-----------------+------------+

答案 1 :(得分:1)

在将IP地址传递给数据库时,您是否只能在PHP中使用ip2long()函数?

然后当你想要返回它时,将字段包装在long2ip