这是什么? 我的疑问是:
Doctrine_Query::create()
->select('rec.*')
->from('Records rec')
->execute();
记录表包含超过20k行。
在页面上执行查询时出现错误:
Fatal error: Maximum execution time of 60 seconds exceeded in \doctrine\lib\Doctrine\Collection.php on line 462
修改 但要从记录超过20k的表中检索值超过60秒。为什么?我正在使用相同的表来检索带有where子句的其他记录,它运行得很完美..
表格结构:
CREATE TABLE IF NOT EXISTS `records` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`state` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`city` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`school` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=16334 ;
数据库是本地的。
我们可以做一件事,我们可以选择一个元素。喜欢:城市...... 我试过,即便如此,它给出了同样的错误..
行数为16333(确切),列数为4,如表结构中所述。
有谁能告诉我如何解决它? 意味着它为什么不工作.. mysql简单选择查询工作正常..
EDIT ----
任何人都可以解释为什么他/她投票我的问题为“否定”
答案 0 :(得分:3)
Doctrine_Query::create()
->select('rec.*')
->from('Records rec')
->limit(5000)
->execute();
尝试这个..它会工作正常,但增加限制然后你将面临问题。修复这么多记录将导致问题..改变你正在使用的逻辑。索引等可以解决你的问题,但我没有任何关于那个的想法......可能有些人可以帮助你。
答案 1 :(得分:1)
向数据库添加where子句时,可能会导致它使用索引,从而使数据库引擎更容易。在一个数据库查询中一次性获取整个表通常是个坏主意,尽管这可能适用于较小的表。如果您一次抓住整个表格,它暗示您滥用数据库,可能将其视为一个美化的文件系统。一般来说,趋势应该只是抓住你需要的东西,并在可能的情况下抓住数据库端的全局操作和更新。
所有这一切,20000记录的60s看起来真的很慢。您可能需要检查您的数据库是否配置正确(例如,使用足够的RAM等等)。您可能会在http://mysqltuner.pl处找到mysqltuner perl脚本。
答案 2 :(得分:1)
在服务器安装的文件php.ini中,您将找到配置选项max_execution_time = 60。
尝试设置max_execution_time = 240甚至更高。
编辑php.ini后不要忘记重新启动网络服务器,以便读取文件。