我想添加索引来优化以下查询。我们正在传递函数参数中的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注入和代码可重用性,并更好地维护代码