2014-11-25 80 views
0

我正在查詢有很多記錄的幾個表。在特定的關係中,關係是m:n,並且生成的查詢JOIN合適的表。問題是由此產生的查詢非常緩慢。我能夠通過刪除JOIN並將其放入子查詢來重寫它,但我不確定如何將其添加到創建查詢的存儲庫中。基本上我想要的是仍然使用createQuery(),因爲它做了很多檢查,但只優化了它的一小部分。優化與Extbase生成的SQL查詢

它可能與當前的實現,或者是我唯一的選擇從頭開始寫整個查詢?

+0

也許你可以通過向表中添加一些鍵來加速連接查詢?嘗試爲查詢連接的列添加鍵。 – Jost 2014-11-25 16:35:32

+0

我已經添加了所有需要的密鑰。問題是如何生成查詢。我設法改變它與contains(),而不是equals(),但是當我也添加排序列時,它回到相同的慢速。 – Vladimir 2014-11-25 16:44:11

+0

您是否嘗試爲訂購欄添加按鍵?如果這沒有幫助,我沒有更多的想法,但也許別人有。 – Jost 2014-11-25 16:45:45

回答

0

只寫優化人工查詢:

$query = $this->createquery(); 
$query->getQuerySettings()->setRespectStoragePage(FALSE); 
$query->statement('your query'); 
return $query->execute(TRUE); 

只要查詢仍返回從屬於庫表中的記錄(以及模型的孩子),Extbase仍然會做映射你需要有流體訪問對象,它的子對象和它們的屬性。

+0

setReturnRawQueryResult(TRUE)在TYPO3 6.2中不推薦使用 - 要獲得相同的功能,請使用query-> execute(TRUE);並刪除setReturnRawQueryResult。 – derhansen 2014-11-26 09:47:07

+0

謝謝,我在說明中修正了它。 – lorenz 2014-11-26 11:20:02