Очень медленно работает выборка 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
Листинг программы
- SELECT
- cn.name_ru,
- re.price_real_estate,
- cn.uniq_id,
- cn.name_en,
- re.id_real_estate
- FROM
- company_names cn,
- company_real_estate re
- JOIN real_estate_properties_select ps
- USING(id_real_estate)
- JOIN real_estate_properties_radio pr
- USING(id_real_estate)
- WHERE
- cn.uniq_id = re.uniq_id
- AND re.real_estate_type = 1
- AND re.sale_rent = 0
- AND (
- ps.id_propertie,
- ps.select_value
- ) IN(
- (3, 2),
- (5, 2),
- (7, 1),
- (8, 1)
- )
- AND (
- pr.id_propertie,
- pr.select_value
- ) IN(
- (1, 0),
- (2, 1),
- (3, 1),
- (6, 1),
- (9, 1),
- (12, 1)
- (14, 1),
- (15, 1),
- (144, 1)
- )
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д