по связанным данным
У основной сущности есть связь на адресс, у адреса на район, у района на город, у города на страну. И нужно найти 10-ть базовых сущностей у которых в названии страны встречается текст, либо соответствие по другим полям.
Как искать по таким полям?
search->address->district->city->country->title LIKE :term
OR
search->user->username LIKE :term
Если использовать поздапросы, то не работают индексы.
SELECT * FROM address WHERE address_id IN (
SELECT address_id FROM district WHERE district_id IN (
SELECT district_id FROM city WHERE city_id IN (
SELECT city_id FROM country WHERE title LIKE :term
)))
LIMIT 10
Если использовать джоины, то лимит не работает
Если выбирать по отдельным запросам, то индексы и лимиты работают, но промежуточные данные могут быть огромны и идёт нагрузка по network
Пример с адресом для наглядности просто. При том что таблицы большие. В некоторых 100кк+ записей, в некоторых 100к+ записей
Select ad.* From address ad, district dis, city c, country con Where Ad.address_id=dis.address_id And dis.district_id=c.district_id And c.city_id=con.city_id And con.title like '%text%' Limit 10
Что такое базовая сущность?
Обсуждают сегодня