Да.
Но самая большая проблема заключается в следующем: КАК таблицы соединяются. Предположим, у вас был запрос типа:
select book.title, chapter.page_count
from chapter
join book on book.bookid=chapter.bookid
where chapter.subject='penguins'
Запрос, вероятно, будет сначала читать таблицу глав в поисках совпадений для «пингвинов», а затем присоединяться к «Книге». Если Bookid является первичным ключом книги или, по крайней мере, проиндексирован, это будет очень быстро. Но если нет, то мы должны были бы выполнить последовательное чтение Книги в полном файле. В зависимости от движка и других факторов, нам может потребоваться перечитать всю таблицу Book для каждой найденной записи главы . Это может занять много времени.
Если вы объединяете три таблицы и оба объединения требуют полного чтения файла, вы можете оказаться в мире боли.
Соединения всегда стоят вам что-то . Но объединения, для которых требуется чтение всего файла, особенно многократное чтение, стоят дорого. Некоторые движки баз данных уменьшают эти затраты, распознавая, что это происходит, и могут загрузить таблицу в память и использовать ее повторно, обычно выполняя какой-то поиск по хешу. Это все еще дорого, но не так плохо.
Научитесь читать план объяснения. Они могут очень помочь в анализе ваших запросов, выяснить, где они плохие, и очистить их. Лично, если запрос явно не прост, например, «выбрать что-либо из таблицы, где primary_key = что угодно», я проверяю план объяснения просто для уверенности.