Как оптимизировать запрос с 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.