问题描述
使用Spring Boot(v2.1.7.RELEASE),我为简单实体添加了自定义存储库。
@Entity
@Table(name = "sample")
public class SampleEntity {
@Id
@Column(name = "id")
protected UUID id;
...
@Type(type = "jsonb")
@Column(name = "eavs",columnDeFinition = "jsonb")
private List<Eav> eavs;
...
}
我使用一个简单的JPARepository接口。
@Repository
public interface SampleEntity extends JpaRepository<SampleEntity,UUID> {
@Modifying
@Transactional
@Query(value = "UPDATE sample SET eavs = CAST(?1 AS JSONB) WHERE id = ?2",nativeQuery = true)
void updateEavs(String eavs,UUID id);
}
运行此更新查询时,完成(通过StopWatch)的总时间约为100毫秒。如果我通过远程PgAdmin服务器运行相同的查询,则返回的时间大致相同。不过,如果我使用EXPLAIN ANALYZE进行运行,它会显示查询实际上需要2毫秒才能执行。
Psql:
DB=# UPDATE public.sample SET eavs='[]' WHERE id = '2f63d484-2bd4-4231-a056-f71a66b34473';
UPDATE 1
Time: 1.665 ms
PgAdmin:
Successfully run. Total query runtime: 160 msec.
1 rows affected.
什么解释了差异?该表有10行,查询执行时间看起来很高效,我以为JDBC获取连接,但是启用了登录服务,这花费了大约1ms的时间。没有其他活动的连接或锁。我在非JSONB列上尝试了相同的操作。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)