Технически SQL является описательным языка а не процедурный язык. Это означает, что SQL-запрос описывает набор результатов, но движок может выполнять запрос, как ему нравится.
Таким образом, возможно, оптимизатор SQL может оптимизировать ссылки на таблицы. Одним из крайних примеров этого является BigQuery Google, который кэширует результаты запросов. Часто кэш запросов используется во второй раз, когда выполняется запрос - результаты повторно используются вместо пересчета.
На практике, однако, в основном все двигатели SQL (при выполнении запроса) обрабатывают таблицы в предложении FROM (либо напрямую, либо через индексы). Могут быть некоторые механизмы SQL, которые оптимизируют некоторые ссылки (скажем, left join
к таблице на первичном ключе второй таблицы, где не используются столбцы).
Как правило, вы можете ожидать, что добавление большего количества таблиц повлияет на производительность.
Что вы подразумеваете под "не использовался?" Зачем нужен ваш запрос? Обычно, если таблица находится в запросе, она «используется» в базе данных, независимо от того, возвращаете ли вы данные, которые находятся в этой таблице. –
реалистично, если стол, на который вы стреляете, действительно не используется (т.вы не используете его, чтобы ссылаться на другие таблицы и извлекать данные, и это не промежуточная таблица для подключения других частей связанной информации, и вы также не отбрасываете значения в инструкции select), тогда ее следует удалить, так как это все равно будет влиять на скорость запроса (точно, какая часть влияния зависит от нескольких вещей, например, если соответствующая таблица правильно проиндексирована и сколько данных она содержит) – user2366842
То, что вы делаете, называется декартовым продукт. поэтому, если неиспользуемая таблица не пуста, у вас будет намного больше строк, и поскольку вы не выбираете ничего из неиспользуемой таблицы, все они будут дублирующими. вы можете выполнять различные действия, чтобы исключить дубликаты, которые будут замедлять запрос – Meet