2010-01-27 100 views
1

這是什麼? 我的查詢是:致命錯誤:在 doctrine lib Doctrine Collection.php上超過60秒的最大執行時間超過462行

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子句retriving一些其他記錄,其運行完美..

表結構:

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的簡單選擇查詢工作完美..

編輯----

有誰能夠解釋爲什麼他/她投我的問題「負面」

+0

你可以顯示數據庫結構嗎? – 2010-01-27 16:45:20

+0

您是否也可以發佈表rec的大小以及字段數? – Anax 2010-01-27 17:34:19

+0

有人可以解釋爲什麼他/她投我的問題「消極」 – 2010-02-04 19:41:39

回答

3
Doctrine_Query::create() 
      ->select('rec.*') 
      ->from('Records rec')     
      ->limit(5000) 
      ->execute(); 

試試這個..它會工作正常,但增加限制,那麼你將面臨problems.Retrieving這麼多記錄將導致問題..嘗試改變你使用的邏輯.dedexing等可能解決你的問題,但我沒有任何想法關於那..可能是s ome1在這裏可以幫助你。

1

向數據庫添加where子句時,可能會導致它使用索引,從而使數據庫引擎變得更容易。在一個數據庫查詢中一次全部獲取整個表通常是一個糟糕的主意,儘管這可能適用於較小的表。如果你一次抓住整個桌子,它暗示你濫用了數據庫,也許把它當作一個榮耀的文件系統。總的來說,趨勢應該是隻抓住你需要的東西,並在可能的情況下在DB端進行適當的全局操作和更新。

所有的說法,對於20,000條記錄來說,60s看起來確實很慢。你可能想要檢查你的數據庫是否配置正確(例如,使用足夠的RAM和什麼)。你可能會在http://mysqltuner.pl找到mysqltuner perl腳本很有幫助。

1

在服務器安裝的php.ini文件中,你會發現配置選項的max_execution_time = 60

嘗試設置的max_execution_time = 240,甚至更高。

不要忘了在編輯php.ini之後重新啓動您的網絡服務器,以便讀取文件。

相關問題