在 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.
的查询
我发现使用 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.