Использование Views и CTE в DB2 / AS400 - PullRequest
0 голосов
/ 11 октября 2018

Общий вопрос ..

У меня есть таблица сотрудников (EMPMAST), в которой есть данные как о новых, так и о старых сотрудниках.Существует флаг под названием Current?, который является «Y», если он / она является текущим сотрудником.Теперь я должен выбрать записи в моем SQLRPGLE только с текущими записями, а также с некоторыми другими критериями (например, EMPNAME = 'SAM'). Какой самый лучший способ справиться с этим.(с точки зрения производительности и использования системы)

  1. Чтобы создать представление поверх EMPMAST с Current? = 'Y'.Затем используйте его в программе с другими условиями.
  2. Используйте CTE (с AS) в Программе, которая будет иметь условие Current = 'Y', и используйте его.
  3. использовать таблицу напрямую без CTE и View
  4. любой другой параметр

Ответы [ 2 ]

0 голосов
/ 12 октября 2018

A CTE против View - это две разные вещи.View подходит для запроса, который будет использоваться в нескольких местах, A CTE доступен только в запросе, в котором он определен.Я обычно не использую CTE, кроме как для замены сложного подзапроса.В вашем случае условие достаточно простое, чтобы содержаться в предложении where, поэтому я не вижу необходимости вносить дополнительную сложность.

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

Я склонен использовать гибрид этих методов.Я запрашиваю таблицы, CTE или Views в зависимости от ситуации и четко определяю свои структуры записей в программе.Я предпочитаю просто запрашивать таблицу, но если у меня сложная логика запросов, уникальная для программы, я буду использовать CTE.У меня есть несколько представлений, но они ограничены запросами, которые происходят в нескольких программах, где я хочу убедиться, что одна и та же логика применяется последовательно.

0 голосов
/ 11 октября 2018

Параметры 1, 2 и 3 будут работать одинаково.Скорее всего, у них будет одинаковый оптимизированный план запросов и доступа.

...