在與同行討論N + 1以及嚴重的數據庫查詢性能問題後,我訪問了http://guides.rubyonrails.org/active_record_querying.html。Django N + 1查詢解決方案
的ActiveRecord(導軌):
clients = Client.includes(:address).limit(10)
如果客戶有地址,我打算訪問它們,同時通過客戶端循環,Rails提供includes
,讓它知道先走,並把它們添加到查詢,從而消除了9次查詢。
Django的:
https://github.com/lilspikey/django-batch-select提供批量查詢的支持。你知道其他圖書館或技巧來實現上面Rails提供的,但是在一個不太冗長的莊園中(就像19個字符修復N + 1並且非常清晰的rails例子)?另外,批處理選擇是以同樣的方式解決問題還是這兩個不同的東西?
順便說一句,我沒有問關於select_related
,雖然它可能乍一看似乎是答案。我正在談到address
對client
有一個外鍵的情況。
謝謝。順便說一句,這將創建一個查詢的效率(即,Rails可能做什麼神奇的提供更好的性能,或者他們可能只是語法糖爲同一事物)?顯然,如果所有事情都不需要馬上評估,那麼它會更好,但也許他們也是這樣做的。 – orokusaki 2011-03-24 18:26:07
我不知道。它*可以在一個查詢中執行動作,但這需要Django的ORM還沒有的一定程度的欺騙。 – 2011-03-24 18:28:12
好的。再次感謝。 – orokusaki 2011-03-24 18:29:12