Как переписать SQL-запрос?

Здравствуйте! Пытаюсь получить из базы вопросы без ответа и использую запрос:
SELECT `question`.* FROM `question`
 LEFT JOIN `comment` ON question.id = comment.material_id 
WHERE ((`question`.`deleted`=0) AND (`question`.`moderated`=0) AND (`comment`.`id` IS NULL)) 
AND (`question`.`published_date` > 0) 
ORDER BY `question`.`published_date` 
DESC LIMIT 15

Но в таблице вопросов (question) и ответов (comment) более 15к записей в каждой и запрос очень долго выполняется. Есть ли возможность оптимизировать запрос? Заранее спасибо
  • Вопрос задан
  • 66 просмотров
Пригласить эксперта
Ответы на вопрос 2
HemulGM
@HemulGM
Delphi Developer, сис. админ
Индексируй таблицы. Запрос у тебя простой. Не вижу что тут можно оптимизировать
Ответ написан
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Попробуй WHERE NOT EXISTS
SELECT `question`.* 
FROM `question`
WHERE 
	`question`.`deleted` = 0 AND
	`question`.`moderated` = 0 AND 
	`question`.`published_date` > 0 AND
	NOT EXISTS (SELECT `id` FROM `comment` WHERE `question`.`id` = `comment`.`material_id`) 
ORDER BY `question`.`published_date` DESC 
LIMIT 15;


MariaDB fiddle
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы