Shanghai Tengke Education Dream banco de dados de treinamento de produtos secos compartilhando banco de dados doméstico DM6 primeira experiência (2)

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.

Acho que você gosta

Origin blog.csdn.net/qq_42726883/article/details/108651454
Recomendado
Clasificación