选择大表MySQL的数据

时间:2013-06-17 08:36:22

标签: php mysql

我有一个包含客户的大表,t_customer有10.000.000条记录。

我启动某个PHP脚本,从该表中选择数据,我需要对每个客户执行操作。

但随着数据的逐步推进,SQL查询的运行速度越来越慢,现在终止于Query execution was interrupted

我的查询是:

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

因此限制不再有任何影响,我不知道该怎么做。

P.S。     SELECT id,login FROM t_customer WHERE regdate&lt; 1370955715 LIMIT 2600000,10;

上述查询执行30秒

P.S.S。 即使没有WHERE子句

也会得到相同的结果

2 个答案:

答案 0 :(得分:2)

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

将批量大小降低到1K ,对目标集进行分页,然后查看其进展情况。确保您在regdate上也有索引。 PHP中的100K数组很复杂。

PHP是一种脚本语言,它不是真正的C ++ :)这就是我用C ++编写背景繁重工作者的原因。

答案 1 :(得分:0)

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

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

如果你提高了查询的性能,那么PHP应该有更多的时间来粉碎你的循环和数组。