2016-02-19 3 views
0

У меня есть MySQL-запрос, который работает, но он довольно медленный. Кто-нибудь может помочь мне улучшить скорость следующего запроса?Как я могу настроить этот запрос MySQL?

SELECT * 
    FROM vtiger_accounting va 
    INNER JOIN vtiger_crmentity vc 
    ON va.accountingid = vc.crmid 
    INNER JOIN vtiger_servicecontracts vs 
    on va.accountingrelated2=vs.servicecontractsid 
    INNER JOIN vtiger_servicecontractscf vsf 
    on  
    vsf.servicecontractsid=vs.servicecontractsid 

    WHERE vc.deleted=0 AND va.accountingid > 0 
    and va.accountingstate='Pending' 
    and accountingtype='Pelunasan TB' 
+0

Являются ли какие-либо из столбцов, которые вы запрашиваете при индексировании? – Taichman

+0

Да, они индексируются – Devisy

+0

Также проверяйте типы данных полей, которые вы приравниваете к join..avoid select * .. выберите поля, которые вам важны. –

ответ

0

«Они индексы» - это, вероятно, означает, что каждый из индексов. Это не так же, как «составной» индекс. Следующее было бы гораздо лучше (при условии, что accountingtype в va):

INDEX(accountingstate, accountingtype, accountingid) 

первые 2 (все с «=») может быть в любом порядке; последний («диапазон») должен быть после остальных.

Тот факт, что deleted находится в другом столе, затрудняет оптимизацию этой части. Тем не менее, это может помощь:

INDEX(deleted, crmid) 

More discussion.

Порекомендуйте вам колонки, которые вам действительно нужны, а не *.

Смежные вопросы