【发布时间】:2021-06-13 10:15:57
【问题描述】:
我开发了一个 Spring Boot 应用程序并使用 MySql 来存储值。当我使用 API 存储值时效果很好,但是当我使用 1000 的倍数(1K、10K、100K 等)存储行时,需要很长时间才能完成。我怎样才能找到缺少时间来存储数据的地方。
MySql 插入查询需要更长的时间来插入一行。 Mysql查询慢怎么办?
我在 logback.xml 中添加了以下行,
<Logger name="org.hibernate.type.descriptor.sql" level="trace"/>
但是它为相同的值提供了两次绑定参数,这是一个问题吗?
select
schema0_.id as id1_0_,
schema0_.active as active2_0_,
schema0_.body as body3_0_,
schema0_.created_at as created_4_0_,
schema0_.created_by as created_5_0_,
schema0_.name as name6_0_,
schema0_.updated_at as updated_7_0_,
schema0_.version as version8_0_
from
my_schema schema0_
where
schema0_.name=?
and schema0_.version=?
and schema0_.active=1
binding parameter [1] as [VARCHAR] - [xxxxx]
binding parameter [1] as [VARCHAR] - [xxxxx]
binding parameter [2] as [VARCHAR] - [1.0]
binding parameter [2] as [VARCHAR] - [1.0]
extracted value ([id1_0_] : [BIGINT]) - [1]
extracted value ([id1_0_] : [BIGINT]) - [1]
【问题讨论】:
-
是存储问题还是检索问题?通过休眠存储大量数据时,如果操作不正确,您会遇到性能问题。
-
虽然存储只需要更长的时间..检索不是问题。
-
那么您没有刷新和清除第一个级别缓存,导致由于脏检查而导致存储时间增加。请参阅vladmihalcea.com/… 和vladmihalcea.com/…,了解如何使用 JPA/Hibernate 正确执行批量插入(大型数据集)。
-
如果您正在存储单个值并且需要越来越多的时间,您的表可能没有被索引(或索引太多)或者有其他错误。如果没有看到代码,这个问题将无法回答。
-
表格使用的是什么引擎?
标签: java mysql spring-boot explain