在 DB2/AS400 上使用视图和 CTE



一个通用问题。

我有一个员工表(EMPMAST(,其中包含新员工和旧员工数据。有一个名为Current?的标志,如果他/她是当前员工,则为"Y"。 现在,我必须在SQLRPGLE中选择仅包含当前记录和其他一些条件的记录(例如EMPNAME= 'SAM'(。处理它的最佳方法是什么。(在性能和系统使用情况方面(

  1. 创建Current?= 'Y' 的EMPMAST视图。然后在具有其他条件的程序中使用它。
  2. 在程序中使用条件为Current= 'Y' 的 CTE(带 AS(并使用它。
  3. 直接使用表格,无需 CTE 和视图
  4. 任何其他选项

选项 1、2 和 3 的性能都相同。它们可能都具有相同的优化查询和访问计划。

CTEView是两回事。View适用于将在多个位置使用的查询,CTE仅在定义它的查询中可用。我通常不使用CTE,除了替换复杂的子查询。在您的情况下,条件非常简单,可以包含在 where 子句中,因此我认为没有必要引入额外的复杂性。

有些人会告诉你不要直接在程序中查询表,而是始终使用视图。这样,您可以在程序和数据库之间添加额外的绝缘层,并且您仍然可以使用ExtName定义记录结构,并且不必担心对表的更改,除非它们影响视图本身。在这种情况下,您可能为使用该表的每个程序都有一个专用视图。

我倾向于只使用这些技术的混合。我根据情况查询表、CTE 或视图,并在程序中显式定义我的记录结构。我更喜欢只查询表,但是如果我有一些程序独有的复杂查询逻辑,我将使用 CTE。我确实有一些视图,但这些视图仅限于在多个程序中发生的那些查询,我希望确保一致地应用相同的逻辑。

相关内容

  • 没有找到相关文章

最新更新