我有一个包含客户的大表,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子句
也会得到相同的结果答案 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应该有更多的时间来粉碎你的循环和数组。