Я занимаюсь разработкой приложения и использую Spring Data JPA для работы с базой данных.
Я реализую функцию поиска друзей с помощью панели поиска.Предполагается, что при вводе некоторых символов в базе данных выполняется поиск, чтобы найти и отобразить 10 пользователей, которые соответствуют символам (имя начинается с него, фамилия начинается с него и также должноработать, если кто-то вводит полное имя).
Я написал код, и он работает следующим образом:
@Query(nativeQuery = true,
value="SELECT * FROM users u WHERE (" +
"UPPER(first_name) like CONCAT(UPPER(:query),'%') OR " +
"UPPER(last_name) like CONCAT(UPPER(:query),'%') OR " +
"UPPER(CONCAT(first_name,' ', last_name)) like CONCAT(UPPER(:query),'%')" +
") LIMIT 10")
List<User> findByQueryLikeName(@Param("query") String query);
Однако, когда я смотрю на этот запрос, кажется, что он можетне будь лучшим по производительности.Я не очень разбираюсь в производительности sql, но думаю, что он объединяет 3 оператора where с оператором OR
, а также использует некоторые функции, такие как UPPER
и CONCAT
.Я использую PostgreSQL.
Можете ли вы оценить, будет ли этот тип запроса работать на большом количестве записей?Можете ли вы попытаться объяснить, почему / почему нет?Есть ли у вас какие-либо советы по его улучшению?
Большое спасибо!