halva
Новичок
Есть что то типа такого запроса:
На сервере около 80т записей, такой запрос отрабатывает 2-2.5 секунды. При том если отфильтровать количество сортируемых записей до количества меньше 1000, то запрос будет обрабатывать в сотни раз быстрее. Я так понимаю он тупо тратит много времени на выборку этих данных (Sending data 0.179417, на тестовых данных ), когда нет фильтров.
Мне надо это как то оптимизировать и единственный вариант, который я могу придумать на данный момент это денормализация таблицы cases, то есть создать колонку casesqueue_name и заполнить ее, и добавить на нее индекс. Но это все слишком много работы. Если ли другие варианты как увеличить скорость такого запроса или все таки придется заниматься денормализацией?
Код:
SELECT cases.id , cases.casesqueue_id , cases.contact_id , cases.assigned_user_id , cases.case_number , casesqueue_table.name casesqueue_name, cases.created_by
FROM cases
LEFT JOIN casesqueues casesqueue_table ON cases.casesqueue_id != '' AND cases.casesqueue_id=casesqueue_table.id AND casesqueue_table.deleted=0 AND casesqueue_table.deleted=0
LEFT JOIN contacts contacts_table ON cases.contact_id != '' AND cases.contact_id=contacts_table.id AND contacts_table.deleted=0 AND contacts_table.deleted=0
LEFT JOIN users jt2 ON cases.assigned_user_id != '' AND cases.assigned_user_id=jt2.id AND jt2.deleted=0 AND jt2.deleted=0
WHERE cases.deleted=0 ORDER BY casesqueue_name ASC LIMIT 20
Мне надо это как то оптимизировать и единственный вариант, который я могу придумать на данный момент это денормализация таблицы cases, то есть создать колонку casesqueue_name и заполнить ее, и добавить на нее индекс. Но это все слишком много работы. Если ли другие варианты как увеличить скорость такого запроса или все таки придется заниматься денормализацией?
Последнее редактирование модератором: