Problema con indices de tablas

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • uo4396
    Member
    • ago
    • 90

    #1

    Problema con indices de tablas

    Hola a todos,

    Tenía dos dudas en relación a los índices. A ver si alguien me puede ayudar:

    1- ¿ Como se yo cual es el índice que el optimizador está eligiendo a la hora de realizar una consulta ?

    2- Como puedo hacer que una consulta a base de datos me elija el índice que yo quiero? Creo que se hacer insertando un hint en código pero no tengo ni idea de l que es ni de como implementarlo.

    Muchas gracias a todos
  • zonanet
    Senior Member
    • mar
    • 195

    #2
    %_HINTS DB6 '<IXSCAN TABLE=''TABLA'' INDEX=''"TABLA~N"'' />'

    donde
    DB6 es tu base de datos.
    TABLA es la tabla a la que haces la selección.
    TABLA~N es el índice secundario que vas a utilizar.

    Esta línea va al final de las condiciones del where.

    Saludos

    Comentario

    • DavidXD_XD
      Moderator
      • ago
      • 1255

      #3
      Hola, la que se da el trabajo de elegir el indice mas optimo es la misma BD, prueba con esto, entra al debugg d tu programa en ejecucion, y cuando llegues a la linea donde realizar el SELECT antes de darle F5, vete a la ST05 y activa el trace, luego realizar el paso correspondiente en tu progama (F5), y luego regresas a la ST05 a desactivar el trace, ahi dale en Trace Display y veras el SELECT que realizaste, posicionate sobre la linea cuando hace OPEN (no sobre FECTH) y dale en el boton EXPLAIN, ahi veras la sentencia en nativo que ejecutaste y al mismo tiempo abajo aparecera la tabla de acceso y el indice que eligio la BD, para forzar a la BD que no eliga por nosotros el indice a su criterio haces uso de la prolongacion de sentencia SELECT que menciona Zonanet, espero te pueda ayudar
      David Carballido Córdova

      Comentario

      • uo4396
        Member
        • ago
        • 90

        #4
        Muchas gracias por vuestra ayuda. Mañana probaré a ver que tal.

        Saludos

        Comentario

        • uo4396
          Member
          • ago
          • 90

          #5
          Hola. He hecho lo que me habeis dicho pero el código no me compila:


          SELECT ltak~tanum ltak~vbeln ltap~tapos ltap~nltyp ltap~pvqui
          FROM ltak AS ltak INNER JOIN ltap AS ltap
          ON ltak~tanum = ltap~tanum
          AND ltak~lgnum = ltap~lgnum
          INTO TABLE l_t_tanum_silo
          WHERE ltap~lgnum EQ l_t_t346l-lgnum
          AND ltap~pquit EQ ' '
          AND ltak~lgnum EQ l_t_t346l-lgnum
          AND ltak~kquit EQ ' '
          AND ltak~queue EQ ip_queue.

          %_HINTS DB2 '<IXSCAN TABLE="LTAP" INDEX="LTAP~M"/>'.

          Me dice que la sentencia %_HINTS no está definida.

          Saludos y a ver si me podeis ayudar!!!!

          Comentario

          • DavidXD_XD
            Moderator
            • ago
            • 1255

            #6
            Hola, prueba esta sentencia:

            %_HINTS ORACLE 'INDEX ("LTAP" "LTAP~M")'.
            David Carballido Córdova

            Comentario

            • zonanet
              Senior Member
              • mar
              • 195

              #7
              Originalmente publicado por uo4396
              Hola. He hecho lo que me habeis dicho pero el código no me compila:


              SELECT ltak~tanum ltak~vbeln ltap~tapos ltap~nltyp ltap~pvqui
              FROM ltak AS ltak INNER JOIN ltap AS ltap
              ON ltak~tanum = ltap~tanum
              AND ltak~lgnum = ltap~lgnum
              INTO TABLE l_t_tanum_silo
              WHERE ltap~lgnum EQ l_t_t346l-lgnum
              AND ltap~pquit EQ ' '
              AND ltak~lgnum EQ l_t_t346l-lgnum
              AND ltak~kquit EQ ' '
              AND ltak~queue EQ ip_queue.

              %_HINTS DB2 '<IXSCAN TABLE="LTAP" INDEX="LTAP~M"/>'.

              Me dice que la sentencia %_HINTS no está definida.

              Saludos y a ver si me podeis ayudar!!!!

              Te sobra un punto:

              AND ltak~queue EQ ip_queue .

              la línea es parte de la consulta, entonces es punto va al final de la misma.

              saludos.

              Comentario

              Trabajando...