Эти индексы могут помочь. (Я предполагаю, что id
- это PRIMARY KEY
каждой таблицы.)
ur: (deleted, userid, rating)
a: (deleted, statusid, userid)
a: (deleted, statusid, questionid)
Пожалуйста, укажите EXPLAIN SELECT ...
.
Не используйте COUNT(id)
, если вам не нужно проверьте, что id
не является NULL
. Обычный способ написать это COUNT(*)
.
В одном месте вы проверяете предоставленные значения для deleted
. В другом вы жестко закодируете это. Возможно, неправильно?
AND ur.deleted = 'N'
Если PRIMARY KEY
для q
равно id
, то это приведет либо к 1 ряду, либо к отсутствию строки. Чего мне не хватает?
WHERE q.deleted = '$show_deleted'
AND q.id = ?
(Могут быть и другие советы. Пожалуйста, измените то, что я предложил, и следуйте советам других. Тогда давайте еще раз посмотрим.)