Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Очень медленно работает выборка INNER JOIN - MySQL
|
|||
|---|---|---|---|
|
#18+
Добрый день! У меня есть таблица компании, таблица недвижимости и таблица с параметрами недвижимости. При выборе недвижимости, например квартиры на съем, пользователь может указать параметры по которым он ее ищет. Есть два типа параметров, 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 решениям, на данном этапе я не могу поменять архитектуру. СПАСИБО Вам всем !!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2017, 14:37 |
|
||
|
Очень медленно работает выборка INNER JOIN - MySQL
|
|||
|---|---|---|---|
|
#18+
DDL мы что, сами должны придумать? В студию! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2017, 19:25 |
|
||
|
Очень медленно работает выборка INNER JOIN - MySQL
|
|||
|---|---|---|---|
|
#18+
Akina, Простите, Вам надо create таблиц? А зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2017, 19:51 |
|
||
|
Очень медленно работает выборка INNER JOIN - MySQL
|
|||
|---|---|---|---|
|
#18+
bgraf. Очень прошу не посылайте меня к NoSQL решениям, на данном этапе я не могу поменять архитектуру. СПАСИБО Вам всем !!!! да иди ты к НоСкуЭлью! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2017, 22:03 |
|
||
|
Очень медленно работает выборка INNER JOIN - MySQL
|
|||
|---|---|---|---|
|
#18+
bgraf, вообще, такие запросы очень сложно оптимизировать, надо знать расклад данных, у тебя там много таблиц, надо значит все, чтобы разобраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2017, 22:06 |
|
||
|
Очень медленно работает выборка INNER JOIN - MySQL
|
|||
|---|---|---|---|
|
#18+
bgrafAkina, Простите, Вам надо create таблиц? А зачем? а действительно, зачем нам это все? это ж тебе надо запрос оптимизировать... вот сам и старайся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2017, 23:20 |
|
||
|
Очень медленно работает выборка INNER JOIN - MySQL
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Да где же здесь много таблиц их 4 всего . Ребят, давайте я не буду тратить ничьё время. Уверен что есть форумчане которые сталкивались с проблемой как у меня. Кто как решал? Сам знаю что много join на одну таблицу плохо, но выхода у меня нет. Спасибо за понимание и прошу пропустите мой вопрос если Вы не сталкивались с решением подобного ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2017, 00:39 |
|
||
|
Очень медленно работает выборка INNER JOIN - MySQL
|
|||
|---|---|---|---|
|
#18+
bgraf, ты предлагаешь гадать, здесь к этому не обучены. только при наличии фактов дают решения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2017, 07:30 |
|
||
|
Очень медленно работает выборка INNER JOIN - MySQL
|
|||
|---|---|---|---|
|
#18+
Спасибо всем за помощь! Вот одно из решений которым можно воспользоваться 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 INNER JOIN company_real_estate as real_estate on names.uniq_id = real_estate.uniq_id INNER JOIN ( select id_real_estate from real_estate_properties_select where (id_propertie, select_value) IN((3,2),(5,2),(7,1),(8,1)) group by id_real_estate having count(1)=4 ) p_select on real_estate.id_real_estate = p_select.id_real_estate INNER JOIN ( select id_real_estate from real_estate_properties_radio where (id_propertie, radio_value) IN((1,0),(2,1),(4,1),(6,1),(9,1),(12,1),(14,1),(15,1),(144,1)) group by id_real_estate having count(1)=9 ) p_radio on real_estate.id_real_estate = p_radio.id_real_estate WHERE real_estate.real_estate_type = 1 and real_estate.sale_rent = 0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2017, 20:44 |
|
||
|
Очень медленно работает выборка INNER JOIN - MySQL
|
|||
|---|---|---|---|
|
#18+
. Уверен что есть форумчане которые сталкивались с проблемой как у меня. Кто как решал? так проблема типичная, но универсального решения её нет, ее надо решать в контексте понимания статистики данных, структуры таблиц и предметной области. Сам знаю что много join на одну таблицу плохо, но выхода у меня нет. нет, много join - это ни плохо, и ни хорошо. иногда и один join плохо, иногда и 40 ничего такого страшного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2017, 21:42 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39407535&tid=1830900]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
36ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 138ms |

| 0 / 0 |
