MySQL запрос из нескольких таблиц медленный из-за фильтров WHERE - PullRequest
1 голос
/ 20 сентября 2011

Я использую запрос для выбора данных из 10 таблиц, и в конце у меня есть ГДЕ и 2 условия: первое простое, а второе - сильно замедляется, даже если не возвращаются результаты.

AND (eligible_users.id IS NULL OR 
((eligible_users.program = 3 AND eligible_users.status = 0) 
OR eligible_users.status = 35))

Когда я его удаляю, страница загружается намного быстрее, есть ли способ сделать это быстрее, но при этом сохранить этот фильтр, потому что он мне нужен.

Ответы [ 2 ]

0 голосов
/ 20 сентября 2011

Добавление двух индексов, одного для программы и одного для статуса, вероятно, ускорит процесс.

0 голосов
/ 20 сентября 2011

У вас есть 3 оператора OR в запросе, попробуйте разбить их на 1 или более объединений, например так:

select ...
where ... 
eligible_users.id IS NULL 
UNION
select ...
where ...
(eligible_users.program = 3 AND eligible_users.status = 0) 
OR eligible_users.status = 35
...