Как оптимизировать запрос с Left Join? - MySQL
Формулировка задачи:
Есть такой запрос, выполняется очень долго (30 секунд), в базе в таблице news 85 тысяч записей, а в rels 45 миллионов.
Помогите пожалуйста оптимизировать запрос.
//сама новость $result = mysqli_query($con, "SELECT * FROM news WHERE id = $id"); $row = mysqli_fetch_assoc($result); print_r($row); //похожие новости $result = mysqli_query($con, "SELECT similar_id, news.title, news.text, news.link FROM rels LEFT JOIN news ON news.id = rels.similar_id WHERE rels.news_id = $id LIMIT 100"); while($row = mysqli_fetch_assoc($result)) { print_r($row); }
Решение задачи: «Как оптимизировать запрос с Left Join?»
textual
Листинг программы
SELECT rels.similar_id FROM rels WHERE rels.news_id = $id
Объяснение кода листинга программы
В представленном коде выполняется следующая последовательность действий:
- Указание имени базы данных, с которой будет работать запрос -
news_db
. - Определение таблицы, с которой будет производиться работа -
rels
. - Формулировка запроса на языке SQL с использованием оператора
SELECT
. - Выбор поля
similar_id
из таблицыrels
. - Указание условия для фильтрации результатов запроса -
rels.news_id = $id
. - Использование оператора
WHERE
для применения условия к результатам запроса. - Ожидаемый результат - выборка значений поля
similar_id
из таблицыrels
, удовлетворяющих условиюrels.news_id = $id
. Список действий в виде нумерованного списка с выделением названий и значений переменных в кавычки: news_db
- название базы данныхrels
- название таблицыSELECT rels.similar_id
- название поля и оператор SELECT$id
- значение переменной, используемое в условииrels.news_id = $id
- условие для фильтрации результатов запросаWHERE
- оператор для применения условия к результатам запроса- Ожидаемый результат - выборка значений поля
similar_id
из таблицыrels
, удовлетворяющих условиюrels.news_id = $id
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д