从事与网络抓取相关的 PHP 项目,我的目标是将数据存储到 mysql 数据库中,我在 9 列表中的 3 个索引上使用唯一键索引,记录超过 5k。
- 我是否应该在程序级别检查唯一数据,例如将值放入数组中,然后在插入数据库之前进行比较?
- 有什么办法可以加快我的数据库插入速度?
从事与网络抓取相关的 PHP 项目,我的目标是将数据存储到 mysql 数据库中,我在 9 列表中的 3 个索引上使用唯一键索引,记录超过 5k。
永远不要创建重复的表,这是一种反 SQL 模式,它使处理数据变得更加困难。
也许 PDO 和准备好的声明会给你一点动力,但不要指望它会带来奇迹。
multible INSERT IGNORE 也可能给你一点动力,但不要指望它会带来奇迹。
您应该像这样生成一个多插入查询
INSERT INTO database.table (columns) VALUES (values),(values),(values) 请记住保持在 mysql 将拥有的最大数据包大小以下。这样索引文件必须更新一次。
您可以创建当前拥有的表的副本,但任何字段上都没有索引。将数据存储在此表中。
然后使用事件将临时表中的数据移动到主表中。一旦数据被移动到主表,然后从临时表中删除。
您可以使用触发器跟踪您的更新。您应该更新表,并且您必须为此表正确触发。
您可以在查询中使用“INSERT IGNORE”。这样,如果违反任何唯一约束,则不会插入记录。
例子:
INSERT IGNORE INTO table_name SET name = 'foo', value = 'bar', id = 12345;
使用 PDO,mysqli_* 函数,增加对数据库的插入