sql - 如果您从 Postgresql 的 Java 函数中的函数参数传递查询值,是否存在性能差异?
问题描述
我想添加索引来优化以下查询。我们从函数参数传递 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 和 service 的每个组合运行此查询时,sql 引擎都会创建一个新的查询计划并将其缓存以使用它。
如果您运行相同的确切查询,并且如果您在短时间内使用不同的 service 和 orgid 组合值多次运行此查询,则缓存将充满此查询的查询计划,并从缓存中清空其他查询计划并生成其他查询计划查询慢。
但是,由于它是一个非常简单的查询,并且如果您不在短时间内大量运行它,那根本不是问题
但也建议使用存储过程,避免sql注入和代码重用,更好的代码维护
推荐阅读
- python - Pandas Dataframe 中 EWM 的重置窗口
- python - 如何解决这个 sqlite3 错误
- java - 无法在 Spring Boot 错误中将字段设为私有
- cmd - 如何在其他窗口中多次运行 cmd?
- javascript - 将新值推送到数组擦除旧值
- database - 与分布式数据库系统的严格一致性
- python - 为什么我的 RSI 值与 Yahoo Finance 不同
- sql - 为什么我收到此错误 ORA-00001:违反唯一约束 (HR.DEPT_ID_PK)?
- python - 如何在 Selenium Chrome 上禁用 Cookie?
- python - 根据字符串中的降序数值排列列表中的项目