0

我有一张有客户的大桌子t_customer,里面有 10.000.000 条记录。

我启动了一个特定的 PHP 脚本,它从这个表中选择数据,我需要对每个客户执行一个操作。

但随着数据的推进,SQL 查询运行得越来越慢,现在以Query execution was interrupted.

我的查询是:

SELECT id, login FROM t_customer WHERE regdate<1370955715 LIMIT 2600000, 100000;

所以限制不再有任何影响,我不知道该怎么办。

PS SELECT id, login FROM t_customer WHERE regdate<1370955715 LIMIT 2600000, 10;

上述查询执行 30 秒

PSS 即使没有 WHERE 子句也会得到相同的结果

4

2 回答 2

2

所以你在 PHP 中选择 100K 记录?这是个坏主意。

将批量大小降低到 1K,对目标集进行分页,然后看看它是如何进行的。确保你也有一个索引regdate。PHP 中的 100K 数组很复杂。

PHP 是一种脚本语言,它不是真正的 C++ :) 这就是为什么我用 C++ 编写背景繁重的工作人员。

于 2013-06-17T08:43:47.750 回答
0

MySQL 提供了一个非常聪明的特性,称为分区http://dev.mysql.com/doc/refman/5.1/en/partitioning.html

它允许您自动将庞大的数据集拆分为较小的文件,从而在对数据进行操作时获得巨大的改进。就像 RAID 但用于 SQL :P 在 SO 上有一篇关于分区最佳配置的优秀帖子,但目前找不到。

如果您提高查询的性能,PHP 应该立即有更多的时间来粉碎您的循环和数组。

于 2013-06-17T08:51:59.547 回答