2012-12-20 88 views

回答

2

查詢計劃信息用於提高目錄的性能,但不能根據計劃信息優化自己的查詢。

該目錄僅根據您的索引尺寸根據需要生成該信息;與SQL數據庫不同,目錄不會基於這些信息計劃每個查詢,而是從「查詢計劃」選項卡中反映的結構中查找預先計算的計劃。

查詢報告選項卡確實爲您提供了有關您的代碼執行得不好的索引的信息;您可能需要重新考慮使用這些索引組合的代碼和/或查看這些索引爲何表現不佳;也許你的查詢沒有足夠快地限制結果,或者慢索引非常大,這表明你的ZODB緩存太小而無法容納那麼大的索引,或者其他結果不斷推送它。總體而言,對於大型應用程序來說,保留查詢計劃是一個不錯的主意;在一個項目中,我們停止實例之前轉儲緩存信息,並重新加載再次啓動後,這包括目錄查詢計劃:

plan = site.portal_catalog.getCatalogPlan() 
with open(PLAN_PATH, 'w') as out: 
    out.write(plan) 

和負載:

if os.path.exists(PLAN_PATH): 
    from Products.ZCatalog.plan import PriorityMap 
    try: 
     PriorityMap.load_from_path(PLAN_PATH) 
    except Exception: 
     pass