Почему установка параметров для JpaRepo слишком медленная для простой таблицы с двумя столбцами? - PullRequest
0 голосов
/ 11 мая 2019

Я использую простую сущность только с 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 или жесткого кода значение в результате запроса возвращается в миллисекундах. Так что же не так?

1 Ответ

0 голосов
/ 14 мая 2019

удалось решить: решение состояло в том, чтобы настроить это свойство в URL-адресе jdbc: sendStringParametersAsUnicode = false

Полный пример, если вы используете официальный драйвер MS SQL: jdbc:sqlserver://yourserver;instanceName=yourInstance;databaseName=yourDBName;sendStringParametersAsUnicode=false;

Решение: Запрос к серверу sql выполняется медленно из java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...