Além do comentário de Stefan, a solução clássica para este requisito seria criar o que a Oracle chama de Índice Baseado em Funções.
É bastante similar às colunas geradas no SAP HANA e permitiria ao otimizador aproveitar uma estrutura de Índice existente.
No SAP HANA, o otimizador SQL é inteligente o suficiente para perceber que já existe uma versão em maiúsculas pré-calculada dos dados neste caso:
create column table bbb (name varchar(20)
, upper_name varchar(20) generated always as UPPER(name));
insert into bbb values ('Lars');
insert into bbb values ('Mara');
insert into bbb values ('Josh');
insert into bbb values ('Caroline');
select * from bbb;
NAME
|
UPPER_NAME
|
Lars
|
LARS
|
Mara
|
MARA
|
Josh
|
JOSH
|
Caroline
|
CAROLINE
|
EXPLAIN PLAN FOR select * from bbb where upper(name) = upper('LaRs');
OPERATOR_NAME†† OPERATOR_DETAILS
COLUMN SEARCH†† BBB.NAME, BBB.UPPER_NAME (LATE MATERIALIZATION)
COLUMN TABLE† FILTER CONDITION:
BBB.UPPER_NAME = 'LARS'
Como podemos ver, a coluna gerada é usada aqui sem a necessidade de recodificar a instrução SQL.
Agora, para o uso de LIKE em vez de igual, a função também funciona:
select * from bbb where upper(name) like '%AR%';
NAME
|
UPPER_NAME
|
Lars
|
LARS
|
Mara
|
MARA
|
Caroline
|
CAROLINE
|
EXPLAIN PLAN FOR select * from bbb where upper(name) like '%AR%';
OPERATOR_NAME†† OPERATOR_DETAILS
COLUMN SEARCH†† BBB.NAME, BBB.UPPER_NAME (LATE MATERIALIZATION)
COLUMN TABLE† FILTER CONDITION:
BBB.UPPER_NAME LIKE ''%AR%''
Portanto, os velhos truques ainda funcionam com o SAP HANA
.
Se isso proporciona um desempenho muito melhor é algo que realmente deve ser testado com dados reais.
A grande diferença no SAP HANA em comparação com os DBMS orientados a linhas é que a avaliação da condição WHERE funciona apenas no dicionário (os valores únicos de cada coluna) e não em cada linha individual.
Saudações, Lars