我正在编写的脚本旨在更新记录使用国家和所有 IP 地址(或几乎所有 IP 地址)状态的数据库表。目前,我保持简单,仅从 5 个 RIR(区域互联网注册机构)获取数据并将其保存到我的数据库中。
最初速度是不切实际的,但通过减少日志中的信息量并将 SQL 插入分组为 1000 个组并使用单个查询,速度得到了显着提高。但是,现在运行脚本时,SQL 插入的速度变化很大,我想知道是否有人知道原因。
这是我记录的一些速度。在测试中,我将 PHP 中执行脚本迭代所用的时间和应用 sql 语句所用的时间分开,我没有将 PHP 时间包括在下面的列表中,因为效果可以忽略不计;即使是最大的数据块也不超过 1 秒。
测试速度(插入的数据行数始终保持不变)
测试1 总SQL执行时间:33秒
测试 2 总 SQL 执行时间:72 秒
测试 3 总 SQL 执行时间:78 秒
其他测试继续在约 30 秒和约 80 秒之间波动。
我有两个问题:
1)我应该接受这些差异作为世界的方式,还是有理由?
2)我对将 ~185000 行插入集中到一个查询中感到紧张。有什么理由我应该避免对这些插入使用一个查询?我以前没有处理过一次保存这么多的数据。
谢谢
__
数据库表如下。
Sorage 引擎 - InnoDB
列:
id - int,主键
注册表 - varchar(7)
代码 - varchar(2)
类型 - varchar(4)
开始 - varchar(15)
值 - 整数
日期 - 日期时间
状态 - varchar(10)