MySQL Forums
Forum List  »  Performance

Help using indexes in data warehouse project
Posted by: Hélio Shimojo
Date: June 07, 2012 05:57AM

Hi,

I have a fact table which uses an multiple-columns index that make joins to the dimension tables.
Everything seems perfect, because when I use EXPLAIN to this sentence below, all but 2 joins are using PRIMARY key to join (eq_ref type, which is the best join possible after const and system).

Two joins are not using PRIMARY. The first is the fact table, which is using ref type and using the multiple columns index, which seems ok to me.

The other one is a common dimension table, like all others. This is the one which is puzzling me. Why this table is not using PRIMARY? The multiple column index in the fact table is including the foreign key ID_PROD_SERV in the index 'idx_codex'.

I can do a 'USE INDEX FOR JOIN (PRIMARY)', which seems to work, but then the 'type' column in the EXPLAIN shows 'ALL' which means full scan table...why is this happening?

SELECT DIM_LOCAL.REGIONAL,
FAT_PROC_VENDAS.NUMERO_PEDIDO,
FAT_PROC_VENDAS.NUMERO_LINHA,
FAT_PROC_VENDAS.CONTA_SERVICO,
DIM_PROD_SERV.TIPO_PRODUTO,
DIM_PROD_SERV.TIPO_SERVICO,
DIM_PROD_SERV.DESCRICAO,
DIM_TIPO_VENDA.TIPO_SOLICITACAO,
DIM_TIPO_VENDA.TIPO_SOLICITACAO_GRUPO,
DIM_TIPO_VENDA.CATEGORIA_INDICADOR,
DIM_FILA.STATUS_PEDIDO,
DIM_FILA.STATUS_LINHA,
DIM_FILA.FILA_GRUPO2,
DIM_LOCAL.UF,
DIM_CARTEIRA.CARTEIRA_GRUPO,
DIM_VENDEDOR.CANAL,
DIM_MAIL_BL_PORT.BACKLOG,
DIM_MAIL_BL_PORT.MAILING,
DIM_MAIL_BL_PORT.PORTABILIDADE
FROM VC_FAT_PROCESSO_DE_VENDA FAT_PROC_VENDAS USE INDEX FOR JOIN (IDX_CODEX1)
INNER JOIN VC_DIM_PROD_SERV DIM_PROD_SERV ON FAT_PROC_VENDAS.ID_PROD_SERV = DIM_PROD_SERV.ID_PROD_SERV
INNER JOIN VC_DIM_TIPO_SOLICITACAO DIM_TIPO_VENDA ON FAT_PROC_VENDAS.ID_TIPO_SOLICITACAO = DIM_TIPO_VENDA.ID_TIPO_SOLICITACAO
INNER JOIN VC_DIM_ESTADO_PEDIDO DIM_FILA ON FAT_PROC_VENDAS.ID_ESTADO_PEDIDO = DIM_FILA.ID_ESTADO_PEDIDO
INNER JOIN VC_DIM_DDD_UF DIM_LOCAL ON FAT_PROC_VENDAS.ID_DDD_UF = DIM_LOCAL.ID_DDD_UF
INNER JOIN VC_DIM_VENDEDOR DIM_VENDEDOR ON FAT_PROC_VENDAS.ID_VENDEDOR = DIM_VENDEDOR.ID_VENDEDOR
INNER JOIN VC_DIM_TEMPO DIM_TEMPO_FOTO ON FAT_PROC_VENDAS.ID_DIA_FOTO = DIM_TEMPO_FOTO.ID_TEMPO
INNER JOIN VC_DIM_TEMPO DIM_TEMPO_INPUT ON FAT_PROC_VENDAS.ID_DATA_INPUT = DIM_TEMPO_INPUT.ID_TEMPO
INNER JOIN VC_DIM_MAIL_BACKLOG_PORT DIM_MAIL_BL_PORT ON FAT_PROC_VENDAS.ID_MAIL_BL_PORT = DIM_MAIL_BL_PORT.ID_MAIL_BACK_PORT
INNER JOIN VC_DIM_TEMPO DIM_TEMPO_ULT_AT ON FAT_PROC_VENDAS.ID_DATA_ULT_AT = DIM_TEMPO_ULT_AT.ID_TEMPO
INNER JOIN VC_DIM_TEMPO DIM_TEMPO_PORTIN ON FAT_PROC_VENDAS.ID_DATA_PORTIN = DIM_TEMPO_PORTIN.ID_TEMPO
INNER JOIN VC_DIM_EQUIPAMENTO DIM_EQUIP ON FAT_PROC_VENDAS.ID_EQUIPAMENTO = DIM_EQUIP.ID_EQUIPAMENTO
INNER JOIN VC_DIM_OPERADORA_PORTIN DIM_OPERADORA ON FAT_PROC_VENDAS.ID_OPERADORA_PORTIN = DIM_OPERADORA.ID_OPERADORA_PORTIN
INNER JOIN VC_DIM_CLIENTE DIM_CLIENTE ON FAT_PROC_VENDAS.ID_CLIENTE = DIM_CLIENTE.ID_CLIENTE
INNER JOIN VC_DIM_VENDEDOR DIM_ADABASPGC ON FAT_PROC_VENDAS.ID_VENDEDOR = DIM_ADABASPGC.ID_VENDEDOR
INNER JOIN VC_DIM_STATUS_PORTABILIDADE DIM_STATUS_PORTIN ON FAT_PROC_VENDAS.ID_STATUS_PORTIN = DIM_STATUS_PORTIN.ID_STATUS_PORTABILIDADE
INNER JOIN VC_DIM_CARTEIRA DIM_CARTEIRA ON FAT_PROC_VENDAS.ID_CARTEIRA = DIM_CARTEIRA.ID_CARTEIRA
WHERE DIM_TIPO_VENDA.TIPO_SOLICITACAO_GRUPO = 'ALTA'
AND DIM_TIPO_VENDA.CATEGORIA_INDICADOR = 'Pen'
AND DIM_PROD_SERV.TIPO_PRODUTO = 'PLANO'
AND DIM_PROD_SERV.TIPO_SERVICO = 'PÓS-PAGO'
AND DIM_TEMPO_FOTO.ANO = 2012
AND DIM_TEMPO_FOTO.MES = 05;

Options: ReplyQuote


Subject
Views
Written By
Posted
Help using indexes in data warehouse project
1954
June 07, 2012 05:57AM


Sorry, you can't reply to this topic. It has been closed.

Content reproduced on this site is the property of the respective copyright holders. It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.