Есть ли способ оптимизировать следующий MySql-запрос?Slow MySQL Query/Large DB/JOIN
SELECT article.*
FROM article
WHERE channelid = 1
AND ((SELECT count(*) FROM article_cCountry WHERE ID1 = article.id AND ID2 = 1) = 1)
AND date < now()
AND released = "TRUE"
AND ((uId = 0) OR ((SELECT count(*) FROM user WHERE ID = article.uId and released = true) = 1))
ORDER BY cDate DESC
LIMIT 20
Я уже пытался использовать INNER JOIN для проверки article_cCountry, но выступление было еще хуже.
EDIT
Структура для article_cCountry
| ID | ID1 | ID2 | (ID1 => article.id, ID2 => country)
Структура для пользователя пользователя
Около 20 столбцов с пользовательскими данными
косяка у помочь нам помочь U, обеспечивая структуру таблицы для связанных таблиц ? – rezashamdani
- это запрос для «выбора всей статьи с помощью channelid = 1 и даты до этого и выпущен и только из страны-производителя, которая имеет только 1 статью и показана только для пользователя, который ее написал, выпущена, которая только пишет 1, или иначе ни один пользователь не написал ее , '? попытайтесь использовать онлайн-тестирование для запроса, поэтому вы можете разместить свои таблицы там, не можете видеть только эту информацию – rezashamdani
да, но: с помощью «SELECT count (*) ... = 1», я имел в виду «Статьи из этого страна ", так как счетчик (*) вернет 0, если статья не из страны« 1 ». То же самое относится к пользовательскому запросу – grundig