Использование объединений, а не подзапросов

У меня есть база данных MySQL, содержащая две таблицы - [PM_text] и [PM_bact], среди других. Две таблицы содержат один общий столбец данных. Мое намерение состоит в том, чтобы получить информацию из первой таблицы, используя сопоставления с общим столбцом данных из второй таблицы. Сначала я использовал для этого вложенный запрос, и он работал нормально. Я вдруг заметил, что он больше не выполняется окончательно. Вместо этого я хочу использовать "соединения", чтобы увидеть, будет ли это еще больше оптимизировать.

Это мой начальный запрос:

ВЫБЕРИТЕ pmid, год, название, страницы ОТ PM_text ГДЕ pmid IN (ВЫБЕРИТЕ pmd_id из PM_bact ГДЕ bact1 НРАВИТСЯ? И bact2 НРАВИТСЯ? И ассоциированный НРАВИТСЯ?);

Но я намерен изменить это на:

ВЫБЕРИТЕ DISTINCT PM_text.pmid, PM_text.year, PM_text.title, PM_text.pages FROM PM_text, PM_bact WHERE PM_text.pmid = PM_bact.pmd_id AND PM_bact.bact1 LIKE? И PM_bact.bact2 НРАВИТСЯ? И PM_bact.associat НРАВИТСЯ? ;

Мне нужно убедиться, что совпадения с 'bact1', 'bact2' и 'associat' указаны во второй таблице, и я обеспокоен тем, что повторное использование AND в запросе может повлиять на его оптимизацию.

Я уверен, что есть лучшие способы сделать это, и, будучи новичком в предмете, я был бы признателен за любую помощь, которую вы можете оказать. Большое спасибо.

1 ответ

Ваш второй запрос в порядке, ничего страшного с множеством утверждений. Убедитесь, что у вас есть индексы для столбцов pmid и pmd_id, и вы должны увидеть хорошую производительность для этого.

Вы можете выписать его полностью, указав внутренние объединения с предложениями on, но запрос будет выполнен так же, как у вас сейчас.

Другие вопросы по тегам