我试图查询PostgreSQL数据库,但这是一个公共服务器,我真的不想浪费大量的CPU很长一段时间。所以我想知道是否有某种方法可以将我的查询时间限制在特定的持续时间内,例如,3/5/10分钟。我假设有像limit这样的语法,但不是针对结果数量,而是针对查询持续时间。
limit
yfwxisqw1#
设置statement_timeout,如果超过这个限制,查询将被终止并返回一个错误。根据this文档:statement_timeout(integer)从命令从客户端到达服务器的时间开始,中止任何花费超过指定毫秒数的语句。如果log_min_error_statement设置为ERROR或更低,则超时的语句也将被记录。值为零(默认值)将关闭此功能。不建议在postgresql.conf中设置statement_timeout,因为它会影响所有会话。
statement_timeout
cnjp1d6j2#
使用LIMIT来控制查询可能运行的时间有一个潜在的问题。正确地说,你也应该在查询中使用ORDER BY,告诉Postgres它应该如何精确地限制结果集的大小。但是这里需要注意的是,当使用ORDER BY和LIMIT时,Postgres通常必须具体化整个结果集,然后还可能进行排序,这可能比仅仅阅读整个结果集花费更长的时间。一种解决方法是只使用LIMIT而不使用ORDER BY。如果执行计划不包括阅读整个表和排序,这可能是一种方法。但是,请记住,如果你走这条路,Postgres将有免费的许可证返回表中的 * 任何 * 记录,从业务或报告的Angular 来看,这可能不是您想要的。但是,这里更好的方法是使用索引之类的东西来调整查询,并使其更快,从而不需要求助于LIMIT技巧。
LIMIT
ORDER BY
2条答案
按热度按时间yfwxisqw1#
设置
statement_timeout
,如果超过这个限制,查询将被终止并返回一个错误。根据this文档:
statement_timeout(integer)
从命令从客户端到达服务器的时间开始,中止任何花费超过指定毫秒数的语句。如果log_min_error_statement设置为ERROR或更低,则超时的语句也将被记录。值为零(默认值)将关闭此功能。
不建议在postgresql.conf中设置statement_timeout,因为它会影响所有会话。
cnjp1d6j2#
使用
LIMIT
来控制查询可能运行的时间有一个潜在的问题。正确地说,你也应该在查询中使用ORDER BY
,告诉Postgres它应该如何精确地限制结果集的大小。但是这里需要注意的是,当使用ORDER BY
和LIMIT
时,Postgres通常必须具体化整个结果集,然后还可能进行排序,这可能比仅仅阅读整个结果集花费更长的时间。一种解决方法是只使用
LIMIT
而不使用ORDER BY
。如果执行计划不包括阅读整个表和排序,这可能是一种方法。但是,请记住,如果你走这条路,Postgres将有免费的许可证返回表中的 * 任何 * 记录,从业务或报告的Angular 来看,这可能不是您想要的。但是,这里更好的方法是使用索引之类的东西来调整查询,并使其更快,从而不需要求助于
LIMIT
技巧。