Php 用数百万行更新MySQL表

Php 用数百万行更新MySQL表,php,mysql,mysql-management,Php,Mysql,Mysql Management,我需要通过INET_ATON()转换ip 在mysql表中,有数百万行 UPDATE `table` SET `ip` = INET_ATON(`ip`) 我需要快速和良好的性能 thank's好吧,您似乎在尝试为char列指定一个数值。正如MichaelH所说,如果你要使用比地址值多的数值,那么你应该考虑以这种格式存储数字。 但是,您可以存储这两个值以提高查询性能: CREATE TABLE t ( address char(15), number int unsigned def

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

UPDATE `table` SET `ip` = INET_ATON(`ip`)
我需要快速和良好的性能


thank's

好吧,您似乎在尝试为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 |
+-----------------+------------+
在将IP地址传递到数据库时,是否可以不使用PHP中的函数


然后,当你想返回它时,用
long2ip

将字段包装起来,这是一次性转换还是你计划在你的项目中多次这样做?为什么不以那种格式存储呢..我同意MichaelH的观点,你应该以INET_ATON()格式存储IP。如果这是不可能的,您可以修改您的更新,以便它排除IP已经是INET_ATON()格式的行,可能使用一些日期检查或保留一个标志。这样,更新将在较小的集合上运行,并且不会对性能产生任何影响。