Oi : então, pra gente poder conversar sobre particionamento, primeiro vamos 
entender o conceito.... Ao contrário dos índices, que basicamente são CÓPIAS 
dos dados chave (então vc pode ter um índice com a coluna x, outro índice com 
os dados da coluna y, etc) , no caso de particionamento os dados originais são 
FISICAMENTE separados, em segmentos/locais dos discos diferentes, de acordo com 
uma CHAVE indicada - e NÂO DÁ pra vc ter os dados reais (não uma cópia, mas os 
dados reais) separados por dois critérios diferentes, o que está aqui não está 
lá :) ... 
  Isso compreendido, aí temos o ponto : para obter melhoria de performance em 
consultas com o particionamento, só se for informado na consulta um valor-chave 
que seja Possível indicar pro RDBMS que POUCAS partições (ou UMA SÓ, no melhor 
dos casos) possa conter a informação.... Pensa num grande fichário com os nomes 
dos seus clientes, com fichas de A a Z  : se todos estão fisicamente no mesmo 
local e vc quer encontrar um cliente FRANCISCO, que começa com a letra F, vc 
tem que ir lendo, lendo, lendo até encontrar o que vc quer... Já se vc tem 
GAVETAS separadas, uma para cada letra, vc pode ir DIRETAMENTE na gaveta com as 
fichas da letra F, aí vc vai ter MUITO MENOS fichas a procurar para encontrar o 
FRANCISCO - OBVIAMENTE vc não precisará tocar nas fichas que estão na gaveta da 
letra A, nem nas fichas da gaveta com a letra B, etc, etc.... SE houver uma 
grande quantidade de fichas no total ** E ** também uma grande quantidade de 
fichas em cada gaveta, a diferença de performance que vc ganha em não ter que 
olhar as gavetas que vc sabe que não tem a letra F poderia ser BRUTAL, okdoc ?? 
Compreendido ??

 Bom, sobre o seu exemplo : antes de te responder, eu ** tenho ** que dizer que 
quem montou esse modelo tava viajando na maionese e foi MUITO, não foi pouco : 
absolutamente NÃO FAZ O MENOR SENTIDO vc repetir a informação do ano E a 
informação do mês em colunas à parte , no RDBMS Oracle (e em quase qquer outro, 
na verdade) é RIDICULAMENTE SIMPLES vc extrair a informação e/ou restringir a 
consulta por ano, ou por mês em cima de uma coluna DATATYPE.... Digamos que 
tenho uma coluna com o datatype date e quero encontrar o ano de 1998, posso 
fazer coisa tipo :
 
  SELECT oqueeuqero WHERE EXTRACT(YEAR FROM colunadate) = 1998

 ou derivações, como usando TO_CHAR ou TO_NUMBER .... E se a pessoa estivesse 
preocupada com performance, já que uma função qquer aaplicada na coluna 
indexada invalida o índice (já ouvi algumas vezes isso como "justificativa" 
para modelagem do tipo) simplesmente poderia se usar um índice de função com a 
função EXTRACT ou seja qual for a usada, OU ainda simplesmente escrever algo 
tipo :
 
 SELECT oqueeuqero WHERE colunadate between to_date('01/01/1998 00:00:00', 
'dd/mm/yyyy hh24:mi:ss') and
                                            to_date('31/12/1998 23:59:59', 
'dd/mm/yyyy hh24:mi:ss') 

 que aí o índice comum na coluna date VAI ser usado SIM,  sem probs.... E é 
CLARO, eu faleei só de performance : ao separar a informação de 
data/dia/mês/ano em várias colunas, eu IMAGINO que vc não está usando o 
datatype DATE para elas, aí vc automaticamente PERDE a checagem de dados 
built-in pra uma coluna date, que invalida AUTOMAGICAMENTE dias/meses/anos 
inválidos....
 
 Obs feita, SE vc tiver REALMENTE que conviver com essa modelagem esdrúxula e 
Inadequada, e realmente for desperdiçar espaço tendo partes da mesma informação 
em múltiplas colunas, o que vc poderia fazer (isso SE quando vc for consultar 
por mês o ano está presente, E se quando vc for consultar por dia o MES e o ANO 
estiverem presentes) é SUB-PARTICIONAR e/ou ter chaves compostas de 
particionamento : 
http://www.dba-oracle.com/art_dbazine_nanda_effective_segment_partitioning_part_2.htm
 pode ser um exemplo de múltiplas chaves e 
http://it.toolbox.com/blogs/data-ruminations/i-didnt-know-subpartitioning-in-oracle-56772
 pode ser um de sub-particionamento - COMPLETE ambos com uma leitura do manual 
específico da sua versão de RDBMS, para conhecer as eventuais mudanças 
específicas pra sua versão....
 
 Sobre PERFORMANCE : isso vai depender do TOTAL de registros, de quantos 
registros haverão por partição/sub-partição E de quantas 
particões/sub-partições vc evitou ler... Isso só você pode confirmar...
 
  []s
  
    Chiappa

Responder a