在 web2py 中使用 "rows.render()" 有什么性能影响?

What performance hit does using "rows.render()" have in web2py?

我发现使用 http://web2py.com/books/default/chapter/29/06/the-database-abstraction-layer?search=lazy#Rendering-rows-using-represent 中描述的 'Represents' 功能会大大降低速度 - 处理某些 table 所需的时间会增加一倍以上。这是一种耻辱,因为这个选项使得从非常简单的 table SELECTs.

中获取人类可读数据变得非常容易

我认为这种性能是意料之中的,因为我假设它正在为每条记录发出 SELECT 以获取代表值。所以我有 1 SELECT 用于我的一组记录,比如 100 条记录,然后还有另外 100+ SELECTS 来获取一个或多个相关 tables 中字段的表示值当我访问这些记录时。

关于如何提高 render() 函数性能的任何提示? 还是我应该期望 render() 选项运行缓慢? 构建具有必要联接的查询以获取表示数据的唯一替代方法是什么?

谢谢

默认情况下,引用相关 table 且定义了 format 属性的 reference 字段将获得一个确实 select 的 represent 函数相关记录(然后将 format function/specification 应用于检索到的记录),导致您观察到的“N+1”查询问题。

如果你还想利用rows.render()来应用其他不涉及数据库select的字段类型的represent功能,可以排除问题为reference 字段通过显式删除其默认 represent 属性:

Field('other_table', 'reference other_table', represent=None)

当然,在那种情况下,您不会得到 other_table 字段的格式良好的表示。正如您所建议的,在这种情况下更有效的替代方法是构建一个连接相关 table.

的查询