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