Когда не следует использовать производные таблицы? - PullRequest
5 голосов
/ 30 июня 2010

В этом SO сообщении подробно описываются некоторые преимущества в производительности относительно производных и временных таблиц

Кроме производительности, существуют ситуации, для которых производная таблица не подходит.

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

Ответы [ 3 ]

1 голос
/ 31 июля 2010

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

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 голос
/ 31 июля 2010

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

CREATE TEMPORARY TABLE foo AS SELECT ...;

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

-- sometime later

SELECT ... FROM foo WHERE ...different conditions...;
1 голос
/ 30 июля 2010

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

...