Есть ли индекс на appointmentstatusmst.entityid
?Как насчет table1.shdclientid
и table1.shdclientdcnid
?Как насчет hlcclientdetails.cldregno
и hlcclientdetails.clddcnid
?
Чтобы ваши объединения работали гладко, вам нужны индексы для столбцов, включенных в критерии объединения, а также для столбца, который вы используете для выбора выходных строк.
@ Богемский правильно, это небольшая проблема среднего размера.
РЕДАКТИРОВАТЬ.
Это может помочь продумать, что на самом деле должен ваш сервер MySQLсделать, чтобы выполнить ваш запрос.
where hlcclientdetails.cldunifiedcrmid = ?
означает, что он должен возиться с вашей таблицей hlcclientdetails
в поисках определенных строк.Таким образом, индекс cldunifiedcrmid
позволит сделать это эффективно.Вы упомянули, что у вас есть этот индекс на месте.Хорошо.
Продолжая,
inner join hlcclientdetails
on a.shdclientid = hlcclientdetails.cldregno
and a.shdclientdcnid = hlcclientdetails.clddcnid
означает, что он должен взять строки, найденные в вашей таблице hlcclientdetails
, и сопоставить их с table1 a
, посмотрев на a.shdclientdcnid
иa.shdclientid
.Таким образом, ваш запрос может получить пользу от составного индекса в table1 a
для этих двух столбцов.Попробуйте добавить этот индекс и посмотреть, улучшится ли производительность.
Наконец,
inner join appointmentstatusmst st
on st.entity_id = a.shdstatuslviid
означает, что сервер должен взять строки, найденные в table1 a
, и сопоставить их доэто третий стол.Вы упомянули в своем комментарии, что entity_id - это PK этой таблицы.Это поможет
Вы поняли идею, я надеюсь.Индексы помогают не только с предложениями WHERE, но и с предложениями ON.
Между прочим, полнотекстовый индекс, упомянутый в другом ответе, не поможет с этой проблемой производительности JOIN, которая возникает у вас.