- Este tópico contém 3 respostas, 4 vozes e foi atualizado pela última vez 14 anos, 9 meses atrás por
Thiago Vilhena.
-
AutorPosts
-
17 de julho de 2010 às 5:58 pm #95103
neoescolhi
ParticipanteFala aí galera beleza?!
Estou executando uma consulta em uma tabela com aproximadamente (411.000.000) registros, é isso mesmo,
411 milhões de registros. Essa consulta leva aproximadamente entre 40 a 50 minutos para executar, gostaria
de saber por obséquio se alguem tem alguma solução para otimizar esse raio dessa consulta.
SELECT
entity,
sum(duration) AS duracao
FROM
mne_e_cif
WHERE
substr(entity,3,1) in ('8','7') AND
TO_DATE (starttime, 'DD/MM/YYY') = TO_DATE (SYSDATE -1, 'DD/MM/YYY') GROUP BY entity
ENTITY NOT NULL VARCHAR2(31) STARTTIME NOT NULL DATE ENDTIME DATE ACCOUNT_TYPE NOT NULL NUMBER(3) DURATION NOT NULL NUMBER(15) A_NUMBER VARCHAR2(31) B_NUMBER VARCHAR2(31) DESTINATION NOT NULL VARCHAR2(31) CDR_PAYMENT_VALUE VARCHAR2(1) TRAFFIC_TYPE VARCHAR2(1) PRS VARCHAR2(2) FREEPHONE VARCHAR2(1) ORIGINATING_DEVICE VARCHAR2(2) TERMINATING_DEVICE VARCHAR2(2) DESTINATION_IDENTIFIER VARCHAR2(31) CALL_VALUE FLOAT(15) OPERATOR_CONNECTED VARCHAR2(1) REVERSE_CHARGE VARCHAR2(1) CHARGE_ADVICE VARCHAR2(1) INCOMPLETE_CALL VARCHAR2(1) CALL_DIVERT VARCHAR2(1) CALL_TRANSFER VARCHAR2(1) MULTI_PARTY VARCHAR2(1) CONF_CALL VARCHAR2(1) EMERGENCY_CALL VARCHAR2(1) DIRECTORY_CALL VARCHAR2(1) PARTIAL_CDR NUMBER(1) ROAMER NUMBER(1) IMSI VARCHAR2(15) EQUIPMENTID VARCHAR2(15) CELLID VARCHAR2(31) TERMINATING_CELL_ID VARCHAR2(31) ORIGINATING_SWITCH VARCHAR2(15) CDQ_CUSTOM_FIELD_1 VARCHAR2(31) CDQ_CUSTOM_FIELD_3 VARCHAR2(31) CDQ_CUSTOM_FIELD_6 VARCHAR2(31) RATING NUMBER(10,3) LATITUDE FLOAT(10) LONGITUDE FLOAT(10) CALL_TYPE NUMBER(5) STORED NOT NULL DATE PARTNUM NOT NULL NUMBER(10) ARCHIVED CHAR(1)
Ir para o topo
19 de julho de 2010 às 4:30 am #95105Leonardo Litz
ParticipanteOla.
Caso nao exista. Ja pensou em criar um indice para a seguinte condicao?
substr(entity,3,1)
Caso nao exista, ja pensou em particionar a tabela pela coluna starttime criando uma particacao por dia?
Vlw Leonardo Litz
19 de julho de 2010 às 7:20 am #95106vieri
Participanterode a qury no sql plus
com o comando..
SET AUTOT ON EXP STATS19 de julho de 2010 às 6:36 pm #95114Thiago Vilhena
Participante[quote=”neoescolhi”:8w76n2vj]Fala aí galera beleza?!
Estou executando uma consulta em uma tabela com aproximadamente (411.000.000) registros, é isso mesmo,
411 milhões de registros. Essa consulta leva aproximadamente entre 40 a 50 minutos para executar, gostaria
de saber por obséquio se alguem tem alguma solução para otimizar esse raio dessa consulta.[/quote]
Veio qual é a versao do banco de dados? tipo fazer tunning de query, voce primeiro tem que ver como o otimizador do oracle esta agindo para resolver essa query, caso seja 10g+ para analizar isso da um set autotrace traceonly explain no sqlplus e roda essa query, ela nao vai resolver o sqlplus vai te trazer o plano de acesso dessa query.
Como a tabela é bem grandinha, seria interessante analisar, criar e testar particionamento e subparticionamento.
DICA: primeira coisa q iria fazer era analisar para verificar a melhor maneira de particionar e subparticionar essa tabela, faria esse teste, e verificaria o tempo de resposta da query. performance e tunning é uma missao ardua rsrs. mas persevera que voce conssegue.
-
AutorPosts
- Você deve fazer login para responder a este tópico.