IBM DB2 - Conceitos de design de tabela - Colunas geradas
Uma coluna gerada é definida em uma tabela em que o valor armazenado é calculado usando uma expressão, em vez de ser especificado por meio de uma operação de inserção ou atualização.
Ao criar uma tabela onde se sabe que certas expressões ou predicados serão usados o tempo todo, você pode adicionar uma ou mais colunas geradas a essa tabela. Ao usar uma coluna gerada, há oportunidade para melhorias de desempenho ao consultar os dados da tabela.
Por exemplo, existem duas maneiras pelas quais a avaliação de expressões pode ser cara quando o desempenho é importante:
Para melhorar o desempenho da consulta, você pode definir uma coluna adicional que conteria os resultados da expressão. Então, ao emitir uma consulta que inclua a mesma expressão, a coluna gerada pode ser utilizada diretamente; ou, o componente de reescrita de consulta do otimizador pode substituir a expressão pela coluna gerada.
Onde as consultas envolvem a junção de dados de duas ou mais tabelas, a adição de uma coluna gerada pode permitir que o otimizador escolha estratégias de junção possivelmente melhores.
As colunas geradas serão usadas para melhorar o desempenho das consultas. Como resultado, as colunas geradas provavelmente serão adicionadas após a criação e o preenchimento da tabela.
Veja a seguir um exemplo de definição de uma coluna gerada na instrução CREATE TABLE:
CREATE TABLE t1 (c1 INT, c2 DOUBLE, c3 DOUBLE GENERATED ALWAYS AS (c1 + c2) c4 GENERATED ALWAYS AS (CASE WHEN c1 > c2 THEN 1 ELSE NULL END))
Depois de criar esta tabela, os índices podem ser criados usando as colunas geradas. Por exemplo,
CREATE INDEX i1 ON t1(c4)
As consultas podem tirar proveito das colunas geradas.< Por exemplo,
SELECT COUNT(*) FROM t1 WHERE c1 > c2
Pode ser escrito como:
SELECT COUNT(*) FROM t1 WHERE c4 IS NOT NULL
Outro exemplo:
SELECT c1 + c2 FROM t1 WHERE (c1 + c2) * c1 > 100
pode ser escrito como:
SELECT c3 FROM t1 WHERE c3 * c1 > 100