PHP导致高SQL负载


PHP causing high SQL load

我需要将70000个csv条目导入SQL数据库。不幸的是,这导致了极高的服务器负载,并最终导致服务器崩溃。我在读这篇关于大规模SQL导入的文章http://naleid.com/blog/2009/10/01/batch-import-performance-with-grails-and-mysql/它提到需要冲洗"处理这个问题的最简单方法是创建一个简单的方法来定期清理这些集合。"

然后,它会非常快速地运行脚本,尽管它是用另一种语言编写的,但有PHP替代方案吗?用于冲洗或垃圾收集。在一个循环中导入70000个条目的最佳方式是什么?

文章还提到使用MySQL索引来减少负载,我如何在PHP中也这样做?

感谢

附言:你认为它是SQL还是CSV阅读器?

您可以尝试下一步:

执行TableShadowCopy。(如果是活动表,这样可以避免站点挂起,否则可以跳过此步骤)

DROP TABLE IF EXISTS __shadow_table; // droping previous shadow table if exists
CREATE TABLE __shadow_table LIKE table; // COPY source table structue
CREATE TABLE IF NOT EXISTS __shadow_table SELECT * FROM table; // possible use of WHERE statemnet

现在您有了源表的精确副本,您可以使用它做您需要做的事情,而不必担心导入时"站点关闭"的后果。

DISABLE索引在新创建的表上

ALTER TABLE __shadow_table DISABLE KEYS;

现在,您可以对表(__shadow_table)进行导入。

尝试LOAD DATA LOCAL INFILE(需要FILE权限)

如果您有FILE权限,请使用BULK INSERT

INSERT INTO __shadow_table (col1, col2, col3, col4) VALUES (1,2,3,4), (6,7,8,9), (20,30,40,60);

启用表(影子表)上的索引

ALTER TABLE __shadow_table ENABLE KEYS;

DROP原始表

DROP TABLE IF EXISTS table

RENAME将影子表转换为原始(DROP ped)名称

RENAME TABLE __shadow_table TO table;

导入时禁用索引可以减少插入数据时的负载和HDD搜索。此外,如果表为InnoDB,则应将FOREIGN_KEY_CHECKS禁用为。在导入过程中禁用的所有东西都应该在导入结束时启用。