我正在查詢有很多記錄的幾個表。在特定的關係中,關係是m:n,並且生成的查詢JOIN合適的表。問題是由此產生的查詢非常緩慢。我能夠通過刪除JOIN並將其放入子查詢來重寫它,但我不確定如何將其添加到創建查詢的存儲庫中。基本上我想要的是仍然使用createQuery(),因爲它做了很多檢查,但只優化了它的一小部分。優化與Extbase生成的SQL查詢
它可能與當前的實現,或者是我唯一的選擇從頭開始寫整個查詢?
我正在查詢有很多記錄的幾個表。在特定的關係中,關係是m:n,並且生成的查詢JOIN合適的表。問題是由此產生的查詢非常緩慢。我能夠通過刪除JOIN並將其放入子查詢來重寫它,但我不確定如何將其添加到創建查詢的存儲庫中。基本上我想要的是仍然使用createQuery(),因爲它做了很多檢查,但只優化了它的一小部分。優化與Extbase生成的SQL查詢
它可能與當前的實現,或者是我唯一的選擇從頭開始寫整個查詢?
只寫優化人工查詢:
$query = $this->createquery();
$query->getQuerySettings()->setRespectStoragePage(FALSE);
$query->statement('your query');
return $query->execute(TRUE);
只要查詢仍返回從屬於庫表中的記錄(以及模型的孩子),Extbase仍然會做映射你需要有流體訪問對象,它的子對象和它們的屬性。
也許你可以通過向表中添加一些鍵來加速連接查詢?嘗試爲查詢連接的列添加鍵。 – Jost 2014-11-25 16:35:32
我已經添加了所有需要的密鑰。問題是如何生成查詢。我設法改變它與contains(),而不是equals(),但是當我也添加排序列時,它回到相同的慢速。 – Vladimir 2014-11-25 16:44:11
您是否嘗試爲訂購欄添加按鍵?如果這沒有幫助,我沒有更多的想法,但也許別人有。 – Jost 2014-11-25 16:45:45