2015-07-29 3 views
0

У меня есть следующий SQL-запрос, который начал работать очень медленно, так как в базе данных есть много записей.Медленная производительность MySQL Query

Может ли кто-нибудь увидеть, могу ли я изменить код, чтобы улучшить производительность?

select 
    invoice.id, 
    invoice.job_no, 
    invoice.invoice_no, 
    invoice.invoice_date, 
    invoice.invoice_sent, 
    invoice.address, 
    invoice.contact_id, 
    invoice.employee_id, 
    invoice.amount as inv_amt, 
    sum(job_additions.amount) as add_amt 
from 
    invoice 
     left join 
    job_additions ON invoice.invoice_no = job_additions.invoice_no 
where 
    invoice_sent like '%$_GET[invoice_sent]' 
     and job_no like '$_GET[job_no]%' 
     and invoice.invoice_no like '$_GET[invoice_no]%' 
     and invoice.address like '%$_GET[address]%' 
group by invoice.invoice_no 
order by invoice.id desc 
limit $records_to_return 

Большое спасибо,

Джон

+0

@GordonLinoff - Я внесла изменения в код, чтобы включить переменные, которые передаются из формы. Спасибо –

+0

'% не может использовать индекс, поэтому всегда будет медленным. Кроме того, ваша база данных не имеет нормализации. – Strawberry

+0

@Strawberry не знал о том, как не использовать индексы. Спасибо за подсказку! –

ответ

0

Как указано клубника, LIKE с ВЕДУЩИХ% к струне не может использовать индекс. Итак, сказав, что, глядя на ваш запрос, ваша производительность может быть улучшена, если у вас есть индекс нескольких полей для этих столбцов без ведущего%.

invoice_sent like '%$_GET[invoice_sent]' 
     and job_no like '$_GET[job_no]%' 
     and invoice.invoice_no like '$_GET[invoice_no]%' 
     and invoice.address like '%$_GET[address]%' 

index on... (Invoice_No, Job_No, ID) 

Я добавил идентификатор, который является основой вашего предложения ORDER BY и может помочь в этой оптимизации.

0

Это не было утверждение WHERE, которое замедляло его, это было ОБЪЕДИНЕНИЕ. Я удалил это, и теперь он быстро вспыхивает.

Просто нужно решить, как добиться лучшего соединения.

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