@PathVariable
заключается в получении некоторого заполнителя из URI (Spring называет его шаблоном URI) - см. Справочник по весне Глава 16.3.2.2 Шаблоны шаблонов URI @RequestParam
также должен получить параметр из URI - см. Справочник по весне Глава 16.3.3.3 Параметры запроса привязки к параметрам метода с помощью @RequestParam Если URL http://localhost:8080/MyApp/user/1234/invoices?date=12-05-2013
получает счета-фактуры для пользователя 1234 5 декабря 2013 года, метод контроллера будет выглядеть следующим образом:
@RequestMapping(value="/user/{userId}/invoices", method = RequestMethod.GET)
public List listUsersInvoices(
@PathVariable("userId") int user,
@RequestParam(value = "date", required = false) Date dateOrNull) {
...
}
Кроме того, параметры запроса могут быть необязательными, а по параметрам пути Spring 4.3.3 также может быть необязательным . Остерегайтесь: это может изменить иерархию пути URL и ввести конфликты сопоставления запросов. Например, /user/invoices
предоставит счета для пользователя null
или подробности о пользователе с идентификационными «счетами»?
Для данного столбца вам нужно только проверить, является ли он null
или нет, я не вижу смысла индексировать это. Вместо этого, поскольку booking.paid_at
не должно быть null
, я бы изменил join
с booking
и contact
на inner join
и использовал бы критерии, приведенные в для where для 118 и 119 в соответствии с критериями.
Пример:
SELECT count(DISTINCT booking.id)
FROM ride
JOIN booking ON ride.booking_id = booking.id
AND booking.paid_at IS NOT NULL
AND booking.cancelled_at IS NULL
JOIN contact ON ON booking.contact_id = contact.id
AND (contact.first_name LIKE UPPER('%GAE%') OR contact.last_name LIKE UPPER('%GAE%') OR contact.email LIKE UPPER('%GAE%'))
LEFT JOIN spot s1_ ON ride.from_spot_id = s1_.id
LEFT JOIN spot s2_ ON ride.to_spot_id = s2_.id;
Если он все еще медленный, вы можете предварительно выбрать идентификаторы contact
перед запросом и использовать оператор in.