Pular para o conteúdo
  • Este tópico contém 3 respostas, 4 vozes e foi atualizado pela última vez 14 anos, 9 meses atrás por Thiago Vilhena.
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #95103
    neoescolhi
    Participante

      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.


      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

      #95105
      Avatar photoLeonardo Litz
      Participante

        Ola.

        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

        #95106
        vieri
        Participante

          rode a qury no sql plus
          com o comando..
          SET AUTOT ON EXP STATS

          #95114
          Thiago 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.

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.
          plugins premium WordPress