如果您将Java函数中函数参数的查询值传递给Postgresql,会有性能差异吗



我想添加索引来优化以下查询。我们正在传递函数参数中的orgId和service的值。我想知道的是,这会以任何方式影响性能吗?还是和我们在查询中直接传递值一样。

这里的模板是执行查询的jdbc


fun queryUsers(orgId: OrgId, service: Service): Set<UserId> {
val sql = """
SELECT DISTINCT user_id
FROM users
WHERE org_id = :orgId AND service = :service
""".trimIndent()
val userIds = mutableSetOf<UserId>()
template.query(
"queryUsers",
sql,
mapOf("orgId" to orgId.uuid(), "service" to service.toString()),
{
userIds.add(UserId.fromString(it.getString("user_id")))
})
return userIds
}

如果不是直接运行,那么直接或通过proc运行此查询的性能不会有任何差异。

然而,它可能会影响服务器性能(这可能真的不是问题(,但情况是这样的,每当您直接为orgId和服务的每个组合运行此查询时,sql引擎都会创建一个新的查询计划并缓存它以使用它。

如果您运行相同的查询,并且在短时间内使用不同的service和orgid组合值大量运行此查询,则缓存中会填充此查询的查询计划,并从缓存中清空其他查询计划,从而使其他查询速度变慢。

然而,由于这是一个非常简单的查询,如果你不在短时间内运行它,根本不是问题

而且建议使用存储过程,以避免sql注入和代码可重用性,并更好地维护代码

最新更新