SELECT и наследование

После лирического отступления на тему "что работает и что не работает" вернемся собственно к наследованию и его использованию. Будем считать, что все четыре таблицы у нас уже заполнены - файл test.sql служит именно для этой цели; он создаст БД, с которой мы и будем работать (просьба вернуть ему изначальное расширение .sql).

В случае, если мы будем делать выборки из таблиц-потомков, то наследование не даст нам никаких принципиально новых результатов. Однако, если применять оператор SELECT к родительской для всех остальных таблице dvd, то все становится несколько интереснее.

SELECT *
	FROM dvd

Вот что выдается:

Результат
1PhilipsDVP-3148Kр.1 599,00
2SupraDVS-120Xр.899,00
3DaewooDNS-5800р.1 199,00
1ElenbergHT-111р.2 399,00
2DaewooHC-4250XSр.2 999,00
3SamsungHT-Z110Rр.4 199,00
4LGLH-T3530Xр.5 499,00
1BBKDL370SIр.2 999,00
2DaewooDPC-8209PDр.2 999,00
3ElenbergLD-715р.3 199,00
1CameronCA-575 DVDр.4 599,00
2ElenbergMX-390DVDр.2 499,00

Просили одно, а получили сразу все - и саму таблицу dvd и заодно всех её потомков.

Снова беремся за руководство. Оказывается, есть модификатор ONLY, который заставляет СУБД принимать во внимание только саму таблицу и игнорировать какое-то от неё наследование.

SELECT *
	FROM ONLY dvd

Вот что выдается:

Результат
1PhilipsDVP-3148Kр.1 599,00
2SupraDVS-120Xр.899,00
3DaewooDNS-5800р.1 199,00

До версии 7.1 по умолчанию наследование не применялось при обработке запросов. Однако потом такое поведение СУБД было признано несоответствующим стандарту и было исправлено, теперь при необходимости игнорировать таблицы-потомки указание ключевого слова ONLY обязательно.

ВложениеРазмер
test.sql_.txt4.58 kb

Комментарии

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

В документации

В документации PostgreSQL описано, что наследование также можно применять для увеличения быстродействия при работе с таблицами, которые содержат очень много строк.

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

Это partitioning. Про

Это partitioning. Про него я ещё расскажу подробно.
Я использовал его в MySQL, но там он реализован по другому принципу.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023