2016-06-16 2 views
-2

Я формирую запрос динамически. Одна вещь, которую я заметил, если запрос имеет неиспользованную таблицу в разделе FROM, это влияет на производительность. Просто хотите знать, правильно ли это поведение? Я использую SYBASE DB.Использует ли неиспользованные таблицы из предложения влияние производительности запроса?

EDIT неиспользованная таблица означает, что я включил его в из статьи, но я не использую его в ИНЕКЕ

+0

Что вы подразумеваете под "не использовался?" Зачем нужен ваш запрос? Обычно, если таблица находится в запросе, она «используется» в базе данных, независимо от того, возвращаете ли вы данные, которые находятся в этой таблице. –

+0

реалистично, если стол, на который вы стреляете, действительно не используется (т.вы не используете его, чтобы ссылаться на другие таблицы и извлекать данные, и это не промежуточная таблица для подключения других частей связанной информации, и вы также не отбрасываете значения в инструкции select), тогда ее следует удалить, так как это все равно будет влиять на скорость запроса (точно, какая часть влияния зависит от нескольких вещей, например, если соответствующая таблица правильно проиндексирована и сколько данных она содержит) – user2366842

+0

То, что вы делаете, называется декартовым продукт. поэтому, если неиспользуемая таблица не пуста, у вас будет намного больше строк, и поскольку вы не выбираете ничего из неиспользуемой таблицы, все они будут дублирующими. вы можете выполнять различные действия, чтобы исключить дубликаты, которые будут замедлять запрос – Meet

ответ

0

Абсолютно. Он предполагает, что вам нужно, чтобы JOIN, поскольку он находится в вашем запросе (либо в виде фильтра, либо по какой-либо другой причине). Если это просто соединение (т. Е. Запятая, разделяющая таблицы) без условия WHERE, то производительность будет сильно затронута, так как она будет выполнять декартовую или кросс-функцию по вашим результатам.

Из Sybase Документов:

Креста продукта объединение возвращает результирующий набор, который производит все возможные комбинации строк из двух таблиц. Количество строк в наборе результатов - это произведение количества строк в первой таблице и количество строк во второй таблице.

Пример Финансовые данные и финансовые коды в образце базы данных содержат финансовые данные для фиктивной компании. Обе таблицы имеют столбец кода , который можно использовать для объединения двух таблиц.

Следующей ЗЕЬЕСТ перечислен все данные в FinancialCodes и FinancialData таблицы:

SELECT * FROM FinancialCodes, FinancialData

http://infocenter.sybase.com/help/topic/com.sybase.infocenter.dc38159.1540/doc/html/san1281545626162.html

1

Технически SQL является описательным языка а не процедурный язык. Это означает, что SQL-запрос описывает набор результатов, но движок может выполнять запрос, как ему нравится.

Таким образом, возможно, оптимизатор SQL может оптимизировать ссылки на таблицы. Одним из крайних примеров этого является BigQuery Google, который кэширует результаты запросов. Часто кэш запросов используется во второй раз, когда выполняется запрос - результаты повторно используются вместо пересчета.

На практике, однако, в основном все двигатели SQL (при выполнении запроса) обрабатывают таблицы в предложении FROM (либо напрямую, либо через индексы). Могут быть некоторые механизмы SQL, которые оптимизируют некоторые ссылки (скажем, left join к таблице на первичном ключе второй таблицы, где не используются столбцы).

Как правило, вы можете ожидать, что добавление большего количества таблиц повлияет на производительность.

Смежные вопросы