2012-12-20 49 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