Vamos experimentar, crie uma tabela de partição vertical:
criar tabela test_part (
id int,
t1 varchar (10),
t2 varchar (10),
t3 varchar (10),
t4 varchar (10),
CLUSTER PRIMARY KEY (id)
)
partição por coluna
((id, t1, t2),
(id, t3, t4)
);
Visualize as informações da tabela de partição atual por meio da tabela de sistema DM sysparttables:
SQL> select * from sysparttables;
BASE_TABLE_ID PART_TABLE_ID RESVD1 RESVD2 RESVD3 RESVD4 RESVD5
1 1007 1008 NULL NULL NULL NULL NULL
2 1007 1009 NULL NULL NULL NULL NULL
2 linhas obteve
tempo de uso: 0,268 (ms).
Podemos ver que o ID da tabela base é 1007 e os IDs da subtabela da partição são 1008 e 1009. Em seguida, encontramos as três tabelas 1007, 1008 e 1009.
SQL> selecione o nome dos sistemas onde id = 1007;
nome
1 test_part
1 linhas tiveram
tempo de uso: 0,301 (ms).
SQL> selecione o nome dos sistemas onde id = 1008;
name
1 test_part00DMPART
1 rows obteve o
tempo de uso: 0,236 (ms).
SQL> selecione o nome dos sistemas, onde id = 1009;
name
1 test_part01DMPART
1 rows obteve o
tempo de uso: 0,185 (ms).
Usamos a função tabledef para verificar a definição dessas três tabelas.
SQL> selecione tabledef ('mytest', 'sysdba', 'test_part');
1 CRIAR TABELA "test_part" EM "mytest"
(
"id" INTEGER,
"t1" VARCHAR (10),
"t2" VARCHAR (10),
"t3" VARCHAR (10),
"t4" VARCHAR (10),
CLUSTER PRIMARY KEY ("id")) PARTIÇÃO POR COLUNA (("id", "t1", "t2"), ("id", "t3", "t4"))
1 linhas tiveram o
tempo usado: 0,228 (ms).
SQL> selecione tabledef ('mytest', 'sysdba', 'test_part00DMPART');
1 CRIAR TABELA "test_part00DMPART" EM "mytest"
(
"id" INTEGER,
"t1" VARCHAR (10),
"t2" VARCHAR (10),
CLUSTER PRIMARY KEY ("id"))
1 linha obteve o
tempo usado: 0,290 (ms).
SQL> selecione tabledef ('mytest', 'sysdba', 'test_part01DMPART');
1 CRIAR TABELA "test_part01DMPART" EM "mytest"
(
"id" INTEGER,
"t3" VARCHAR (10),
"t4" VARCHAR (10),
CLUSTER PRIMARY KEY ("id"))
1 linha obteve
tempo de uso: 0,292 (ms )
Você pode ver que as subtabelas de partição criadas automaticamente pelo sistema contêm o ID da coluna CLUSTER PK. As colunas t1 e t2 estão na subtabela de partição test_part00DMPART e as colunas t3 e t4 estão na subtabela de partição test_part01DMPART.
SQL> explain select * from test_part;
#RSET: [2, 2, 0];
#XNLP: [0, 0, 0]; CROSS_JOIN
#CSEK: [2, 2, 0]; INDEX33555488 (test_part00DMPART), FULL_SCAN
#CSEK: [2, 2, 0]; INDEX33555489 (test_part01DMPART),
tempo de INDEX_EQU_SEARCH usado: 7,339 (ms).
SQL> explain selecione t1, t2 de test_part;
#RSET: [2, 2, 0];
#CSEK: [2, 2, 0]; INDEX33555488 (test_part00DMPART),
tempo FULL_SCAN usado: 0,212 (ms).
SQL> explain selecione t3, t4 de test_part;
#RSET: [2, 2, 0];
#CSEK: [2, 2, 0]; INDEX33555489 (test_part01DMPART),
tempo FULL_SCAN usado: 0,199 (ms).
Pode ser visto claramente a partir do plano de execução que quando a tabela inteira é consultada, os resultados são realmente obtidos unindo as duas subtabelas. Ao consultar apenas todas as colunas da subtabela, apenas a subtabela é necessária. Em aplicativos reais, em situações semelhantes ao exemplo acima, o uso do particionamento vertical reduzirá muito a quantidade de dados de consulta, aumentará a eficiência da consulta e otimizará o desempenho do sistema.