Я думаю, что причина медлительности в том, что ваше состояние очень широкое.Вместо этого я бы попробовал сделать простые запросы и объединить их с UNION
, что также отсеет дубликаты.
Итак, что-то подобное может быть полезным (я не могу проверить это утверждение, потому что янет вашей БД), потому что я предполагаю, что каждый отдельный запрос будет довольно быстрым и не будет много записей для слияния:
(SELECT Movies.id, Movies.UnMoID, Movies.runtime, added
FROM Movies INNER JOIN Actors ON Acted.UnMoActorID = Actors.UnMoActorID
WHERE Actors.name LIKE '%spiderman%'
AND Movies.validated =1
AND Movies.ageCertificate <=20)
UNION
(SELECT Movies.id, Movies.UnMoID, Movies.runtime, added
FROM Movies INNER JOIN Directed ON Directed.UnMoID = Movies.UnMoID
INNER JOIN Directors ON Directed.UnMoDirectorID = Directors.UnMoDirectorID
WHERE Directors.name LIKE '%spiderman%'
AND Movies.validated =1
AND Movies.ageCertificate <=20)
UNION
(SELECT Movies.id, Movies.UnMoID, Movies.runtime, added
FROM Movies
WHERE Movies.originalTitle LIKE '%spiderman%'
AND Movies.validated =1
AND Movies.ageCertificate <=20)
UNION
(SELECT Movies.id, Movies.UnMoID, Movies.runtime, added
FROM Movies
WHERE Movies.englishTitle LIKE '%spiderman%'
AND Movies.validated =1
AND Movies.ageCertificate <=20)
UNION
(SELECT Movies.id, Movies.UnMoID, Movies.runtime, added
FROM Movies
WHERE Movies.alsoKnownAs LIKE '%spiderman%'
AND Movies.validated =1
AND Movies.ageCertificate <=20)
UNION
(SELECT Movies.id, Movies.UnMoID, Movies.runtime, added
FROM Movies
WHERE Movies.taglines LIKE '%spiderman%'
AND Movies.validated =1
AND Movies.ageCertificate <=20)
UNION
(SELECT Movies.id, Movies.UnMoID, Movies.runtime, added
FROM Movies
WHERE Movies.plot LIKE '%spiderman%'
AND Movies.validated =1
AND Movies.ageCertificate <=20)
ORDER BY added DESC
Вам необходимо включитьполей, по которым вы хотите отсортировать или отфильтровать результаты запроса.
И если у вас есть механизм, поддерживающий подвыборы, вы можете переместить условия фильтра для проверки и сертификации возраста из отдельных запросов ив общий запрос-обертку, преимуществом которого было бы удаление повторений, таким образом, обслуживание:
SELECT id, UnMoID, runtime FROM
(SELECT ... ) Q -- the above query including all necessary fields
WHERE Movies.validated =1
AND Movies.ageCertificate <=20
ORDER BY added DESC