我想知道是否可以使用门户目录上的“查询报告”和“查询计划”选项卡提供的信息。我可以根据查询报告优化ZCatalog查询吗? ZCatalogs查询计划与SQL数据库的查询计划有何不同?
答案 0 :(得分: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