当我尝试从 mysql 表中删除超过 100,000 行时,我有一个问题,服务器冻结并且不再可以访问其网站!
我等了2个小时,然后重新启动服务器并恢复了帐户。
我使用了以下查询:
DELETE FROM `pligg_links` WHERE `link_id` > 10000
-
SELECT* FROM `pligg_links` WHERE `link_id` > 10000
完美运行
有一个更好的方法吗?
当我尝试从 mysql 表中删除超过 100,000 行时,我有一个问题,服务器冻结并且不再可以访问其网站!
我等了2个小时,然后重新启动服务器并恢复了帐户。
我使用了以下查询:
DELETE FROM `pligg_links` WHERE `link_id` > 10000
-
SELECT* FROM `pligg_links` WHERE `link_id` > 10000
完美运行
有一个更好的方法吗?
您可以删除较小集合中的行。一次删除 1000 行的快速脚本应该可以帮助您完成。
对于大型数据集,“删除”可能非常昂贵。
我建议使用分区。
这在 PostgreSQL 和 MySQL 中可能略有不同,但在 PostgreSQL 中,您可以创建许多表,这些表是较大表的“分区”或在一个分区上。查询和诸如此类的东西可以在更大的表上运行。如果分区正确,这可以大大提高查询速度。此外,您可以通过简单地删除分区来删除它。这发生得非常非常快,因为它在某种程度上相当于删除一个表。
表分区的文档可以在这里找到:
http://www.postgresql.org/docs/8.3/static/ddl-partitioning.html
确保您在 link_id 列上有一个索引。并尝试一次删除像 10.000 这样的块。从表中删除是非常昂贵的操作。