2010-06-30 2 views
5

В этом SO post приведены некоторые преимущества в отношении производных и временных таблиц.Когда нецелесообразно использовать производные таблицы?

В отличие от исполнения, существуют ситуации, для которых таблица Derived не подходит.

Один ответ на сообщение с примером будет полезен.

+0

Это [вопрос помечен для SQL Server] (HTTP : //stackoverflow.com/questions/2326395/which-one-have-better-performance-derived-tables-or-temporary-tables), поэтому информация должна рассматриваться как специфическая для него, а не для всех баз данных. –

ответ

1

Я бы предпочел сделать self-join на временной таблице, чем производная таблица.

CREATE TEMPORARY TABLE foo AS SELECT ...; 

SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...; 

в сравнении с использованием производной таблицы, где вы должны написать весь запрос дважды:

SELECT ... 
FROM (SELECT ...) 
JOIN (SELECT ...) ON ...conditions...; 

Но другое решение заключается в использовании общих табличных выражений, которые немного отличаются от производных таблиц:

WITH foo AS (SELECT ...) 
SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...; 

При условии использования базы данных, поддерживающей этот синтаксис (Microsoft, Oracle, IBM, PostgreSQL).

1

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

1

Если у вас есть доступ к данным во временной таблице в нескольких запросов может быть менее дорогостоящим, чтобы избежать генерации данных временных раз:

CREATE TEMPORARY TABLE foo AS SELECT ...; 

SELECT ... FROM foo WHERE ...conditions...; 

-- sometime later 

SELECT ... FROM foo WHERE ...different conditions...;