Очень медленно работает выборка INNER JOIN - MySQL

Узнай цену своей работы

Формулировка задачи:

Добрый день! У меня есть таблица компании, таблица недвижимости и таблица с параметрами недвижимости. При выборе недвижимости, например квартиры на съем, пользователь может указать параметры по которым он ее ищет. Есть два типа параметров, select и radio , т.е. что-то выбирается из списка select,а что-то путем нажатия на radio. Чтобы таблицы были не переполнены я просто разнес данные по двум таблицам в зависимости от типа параметра. Вот так выглядит мой селект. SELECT names.name_ru, real_estate.price_real_estate, names.uniq_id, names.name_en, real_estate.id_real_estate FROM (company_names as names, company_real_estate as real_estate) INNER JOIN real_estate_properties_select as p_select2 on real_estate.id_real_estate = p_select2.id_real_estate INNER JOIN real_estate_properties_select as p_select4 on real_estate.id_real_estate = p_select4.id_real_estate INNER JOIN real_estate_properties_select as p_select6 on real_estate.id_real_estate = p_select6.id_real_estate INNER JOIN real_estate_properties_select as p_select7 on real_estate.id_real_estate = p_select7.id_real_estate INNER JOIN real_estate_properties_radio as p_radio0 on real_estate.id_real_estate = p_radio0.id_real_estate INNER JOIN real_estate_properties_radio as p_radio1 on real_estate.id_real_estate = p_radio1.id_real_estate INNER JOIN real_estate_properties_radio as p_radio3 on real_estate.id_real_estate = p_radio3.id_real_estate INNER JOIN real_estate_properties_radio as p_radio5 on real_estate.id_real_estate = p_radio5.id_real_estate INNER JOIN real_estate_properties_radio as p_radio8 on real_estate.id_real_estate = p_radio8.id_real_estate INNER JOIN real_estate_properties_radio as p_radio11 on real_estate.id_real_estate = p_radio11.id_real_estate INNER JOIN real_estate_properties_radio as p_radio13 on real_estate.id_real_estate = p_radio13.id_real_estate INNER JOIN real_estate_properties_radio as p_radio14 on real_estate.id_real_estate = p_radio14.id_real_estate INNER JOIN real_estate_properties_radio as p_radio25 on real_estate.id_real_estate = p_radio25.id_real_estate WHERE names.uniq_id = real_estate.uniq_id and real_estate.real_estate_type = 1 and real_estate.sale_rent = 0 and p_select2.id_propertie = 3 and p_select2.select_value = 2 and p_select4.id_propertie = 5 and p_select4.select_value = 2 and p_select6.id_propertie = 7 and p_select6.select_value = 1 and p_select7.id_propertie = 8 and p_select7.select_value = 1 and p_radio0.id_propertie = 1 and p_radio0.radio_value = 0 and p_radio1.id_propertie = 2 and p_radio1.radio_value = 1 and p_radio3.id_propertie = 4 and p_radio3.radio_value = 1 and p_radio5.id_propertie = 6 and p_radio5.radio_value = 1 and p_radio8.id_propertie = 9 and p_radio8.radio_value = 1 and p_radio11.id_propertie = 12 and p_radio11.radio_value = 1 and p_radio13.id_propertie = 14 and p_radio13.radio_value = 1 and p_radio14.id_propertie = 15 and p_radio14.radio_value = 1 and p_radio25.id_propertie = 144 and p_radio25.radio_value = 1 Это пример максимальной опции параметров при выборе недвижимости, и так я получаю ответ от сервера TIME OUT (((, т.е. время на обработку такого селекта превышает допустимое ((((. При меньшем, скажем в половину раз, работает и даже я бы сказал быстро, относительно быстро. Помогите пожалуйста оптимизировать этот огромный селект. Очень прошу не посылайте меня к NoSQL решениям, на данном этапе я не могу поменять архитектуру. СПАСИБО Вам всем !!!!

Решение задачи: «Очень медленно работает выборка INNER JOIN»

textual
Листинг программы
  1. SELECT
  2.     cn.name_ru,
  3.     re.price_real_estate,
  4.     cn.uniq_id,
  5.     cn.name_en,
  6.     re.id_real_estate
  7. FROM
  8.     company_names cn,
  9.     company_real_estate re
  10. JOIN real_estate_properties_select ps
  11.     USING(id_real_estate)
  12. JOIN real_estate_properties_radio pr
  13.     USING(id_real_estate)
  14. WHERE
  15.     cn.uniq_id = re.uniq_id
  16.     AND re.real_estate_type = 1
  17.     AND re.sale_rent = 0
  18.     AND (
  19.         ps.id_propertie,
  20.         ps.select_value
  21.     ) IN(
  22.         (3, 2),
  23.         (5, 2),
  24.         (7, 1),
  25.         (8, 1)
  26.     )
  27.     AND (
  28.         pr.id_propertie,
  29.         pr.select_value
  30.     ) IN(
  31.         (1, 0),
  32.         (2, 1),
  33.         (3, 1),
  34.         (6, 1),
  35.         (9, 1),
  36.         (12, 1)
  37.         (14, 1),
  38.         (15, 1),
  39.         (144, 1)
  40.     )

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут