Использование планов запросов для просмотров
Использование планов запросов для просмотров
Просмотры могут представлять для пользователей некоторые сложности относительно возможности PLAN. В основном пользователи могут трактовать просмотры как обычные таблицы. Однако, если вы захотите определить пользовательский план, вам нужно иметь сведения об индексах и структурах базовых таблиц, участвующих в просмотре.
Оптимизатор трактует ссылку на просмотр так, как если бы базовые таблицы, используемые при создании просмотра, были добавлены в список FROM запроса.
Предположим, просмотр был создан следующим образом:
CREATE VIEW V_PROJ_LEADERS (
PROJ_ID,
PROJ_TITLE,
LEADER_ID,
LEADER_NAME)
AS
SELECT
P.PROJ_ID,
P. PROJ_NAME,
P. TEAM_LEADER,
E.FULL_NAME,
FROM PROJECT P
JOIN EMPLOYEE E
ON P.TEAM_LEADER = E.EMPNO;
Простой запрос к просмотру
SELECT * FROM V_PROJ_LEADERS;
выводит следующий план:
PLAN JOIN (V_PROJ_LEADERS P NATURAL, V_PROJ_LEADERS E INDEX (RDB$PRIMARY7) )
Обратите внимание, что оптимизатор обращается к индексам базовых таблиц (через алиасы р и Е) для лучшего способа поиска в просмотре. Спецификация SELECT в объявлении CREATE VIEW определяет логику выполнения соединения.
Следующий запрос является чуть более сложным. В этот раз просмотр соединяется с таблицей EMPLOYEE PROJECT с помощью первичных ключей таблиц EMPLOYEE и PROJECT. Затем он опять соединяется с таблицей EMPLOYEE для получения ненормализованного списка, который включает имена участников всех проектов, управляемых просмотром:
SELECT
PL.*,
EMP.LAST_NAME
FROM V_PROJ_LEADERS PL
JOIN EKPLOYEE_PROJECT EP
ON PL.PROJ_ID = EP.PROJ_ID
JOIN EMPLOYEE EMP
ON EP.EMP_NO = EMP.EMP_NO;
PLAN JOIN (EMP NATURAL, EP INDEX (RDB$FOREIGN15) , PL P INDEX (RDB$PRIMARY12) ,
PL E INDEX (RDB$PRIMARY?) )
В этот раз индекс внешнего ключа для столбца EMP_NO таблицы EMPLOYEE_PROJECT (с алиасом EP) используется для выбора имен участников проекта из второго "элемента" - EMPLOYEE. Как и в предыдущем случае, соединение внутри просмотра использует первичный ключ таблицы EMPLOYEE для поиска соответствия в TEAM_LEADER.
Если вы решите написать свой план для запроса, который работает с просмотром, вам нужно хорошо знать определение просмотра, понимать индексы и методы доступа.
Известная ошибка в просмотрах в Firebird 1.0.x
Если вы определяете просмотр, который является объединением (union) двух или более наборов, просмотр будет вести себя неправильно при использовании в подзапросе в Firebird 1.0.x. Например, следующий запрос приведет к краху сервера:
SELECT 1 FROM Table1 WHERE EXISTS (
SELECT FIELD1 FROM UNION_VIEW WHERE <условия-поиска> )
Эта ошибка была исправлена до релиза версии 1.5.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Очереди запросов
Очереди запросов Для блочных устройств поддерживаются очереди запросов (request queue), в которых хранятся ожидающие запросы на выполнение операций блочного ввода-вывода. Очередь запросов представляется с помощью структуры request_queue, которая определена в файле <linux/blkdev.h>.
Количество DNS-запросов
Количество DNS-запросов Система DNS устанавливает соответствие имен хостов их IP-адресам, точно так же как телефонный справочник позволяет узнать номер человека по его имени. Когда вы набираете «www.yahoo.com» в адресной строке браузера, преобразователь DNS, к которому обратился
Использование языка запросов поисковых машин
Использование языка запросов поисковых машин В строку запроса поисковой машины, помимо ключевых слов, можно вводить так называемые операторы – специальные служебные слова или символы, которые сообщают поисковой системе, каким образом нужно обращаться с теми или иными
1.3.3. Язык запросов
1.3.3. Язык запросов Для того чтобы Яндекс корректно понимал запросы, состоящие из нескольких слов, был разработан специальный язык запросов. Отдельные его элементы мы уже рассмотрели — это и специальные символы, используемые в обычном поиске, и дополнительные параметры,
10.1.3. Язык запросов
10.1.3. Язык запросов Язык запросов, используемый в Яndex.Server, в полной мере соответствует языку запросов, с которым работает поисковая система Яндекс. Поэтому все, что можно использовать для поиска в Интернете, новостях, среди картинок, поддерживается и в версии программы,
Расширенные возможности указания пользовательских планов
Расширенные возможности указания пользовательских планов Не всегда встроенный оптимизатор может выбрать оптимальный план. Причиной этого может быть отсутствие подробной статистики по индексам и полям, без которой трудно оценить стоимость выполнения варианта или
Типы планов
Типы планов В ключевых практиках описаны два основных типа планов: формальные (например, планы разработки ПО, обеспечения качества ПО и управления конфигурацией ПО) и неформальные (например, планы экспертной оценки, управления рисками и управления
6.2. Оптимизация запросов
6.2. Оптимизация запросов Основным способом повышения производительности запросов являются индексы. Определить, действительно ли созданные вами индексы используются запросом, позволяет командаEXPLAIN <Текст запроса>; Набор данных, выводимый командой EXPLAIN, содержит
Некоторые простые спецификации просмотров
Некоторые простые спецификации просмотров Просмотр может быть создан практически из любой спецификации запроса SELECT. Примеры приведены в следующих разделах.Вертикальное подмножество столбцов одной таблицыТаблица JOB в базе данных employee.fdb имеет восемь столбцов: JOB_CODE,
Изменение поведения изменяемых просмотров
Изменение поведения изменяемых просмотров Альтернативное поведение естественно изменяемых просмотров может быть задано с использованием триггеров. Для конкретной фазы операции (BEFORE/AFTER) триггеры просмотра вызываются до триггеров базовой таблицы. Следовательно, можно
Использование просмотров в SQL
Использование просмотров в SQL В SQL просмотр ведет себя во многих отношениях как обычная таблица. Вы можете осуществлять выборку из него, используя или нет предложения ORDER BY, GROUP BY или WHERE.Если просмотр является естественно изменяемым, или он был сделан изменяемым с помощью