Я использую простую сущность только с 2 столбцами. В моей таблице PK col - это varchar в дБ, но в фактических значениях хранится числовое значение в этом столбце, а в другом столбце - int. БД - это MS SQL Server. И в этой таблице 165 миллионов записей.
Структура таблицы:
SECURITY_TAB
varchar(30) SECID PK;
int VERSION;
Entity
@Entity
@Table(name = "SECURITY_TAB")
public class Security {
@Id
@Column
private String secid;
@Column
private int version;
//... getter n setter n toString
}
Репозиторий
public interface SecurityRepository extends JpaRepository<Security, String> {
@Query("SELECT s from Security s where secid= :secid")
Security findSecurityBySecid(@Param("secid") String secid)); //this is slow
//below is fine.
//@Query("SELECT s from Security s where secid='1111'")
//Security findSecurityBySecid();
}
TestClass
@RunWith(SpringRunner.class)
@SpringBootTest
public class SecurityTests {
@Autowired
private SecurityRepository securityRepository;
@Test
public void testSecurityBySecid() {
Instant start = Instant.now();
Security security = securityRepository.findSecurityBySecid("1111");
System.out.println(Duration.between(start, Instant.now()));
System.out.println(security);
System.out.println(Duration.between(start, Instant.now()));
}
}
Этот простой запрос занимает более 20 секунд,
В то время как при выполнении аналогичного запроса MS SQL Server Mgmt Studio или жесткого кода значение в результате запроса возвращается в миллисекундах. Так что же не так?