3

我想知道是否可以利用门户目录上的查询报告和查询计划选项卡提供的信息。我可以根据查询报告优化 ZCatalog 查询吗?ZCatalogs 查询计划与 SQL 数据库的查询计划有何不同?

4

1 回答 1

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
于 2012-12-21T13:15:12.523 回答