Crear índices de base de datos en SAP

Según Wikipedia un índice de base de datos es una estructura de datos que mejora la velocidad de las operaciones, permitiendo un rápido acceso a los registros de una tabla en una base de datos.
Se suele crear un índice sobre una tabla del diccionario ABAP cuando en uno de nuestros programas nos vemos obligados a hacer búsquedas de información donde el acceso a ésta no se realiza de acuerdo a campos claves de dicha tabla. Si en una tabla tenemos muchos registros, por ejemplo, en la tabla de facturas o materiales podemos tener millones de registros.
Para este tutorial utilizamos la tabla VBRK – Factura Datos de Cabecera. Si tenemos que hacer una búsqueda, una lectura con SELECT donde la selección se hace a través del campo período contable POPER que no es clave, la selección va tardar. En este caso tenemos que crear el índice para indexar todos los registros, y el sistema se encarga de crear en base de datos un índice por el campo indicado POPER. Con este índice las lecturas son mucho más rápidas.

  1. En la transacción del diccionario de datos SE11 entramos en la tabla VBRK y seleccionamos de la barra de herramientas la opción Índices.
  2. El sistema va sacar en un pop-up un listado con los índices que ya están creados sobre la tabla. Para crear un índice nuevo utilizamos la opción del icono Crear y seleccionamos la opción Crear índice. Le ponemos el nombre ZPO y continuamos.
  3. Rellena el campo Descripción breve y utiliza el botón Campos de tabla para añadir el campo POPER como campo índice. Se pueden añadir varios campos en el mismo índice.
  4. Graba el índice vuelve con la flecha atrás o con la tecla F3. En el listado se puede ver el nuevo índice.

9 comentarios de “Crear índices de base de datos en SAP

  1. Pablo Ramirez dice:

    Gracias por la información. Una consulta. Si en la tabla VBAP se tiene un índice del tipo:
    MANDT-MATNR-STLNR-STLKN
    ¿Es este índice menos eficiente que uno del tipo “MANDT-MATNR” si sólo se está buscando información por N°Material?
    Un cordial saludo,

  2. Pablo Quintero Bello dice:

    Hola. Gracias por compartir esta información.
    (1) Cuando se crea una tabla base de datos Z, ¿en qué casos se determina si un índice debe contener un campo o más campos?
    (2) Cuando el índice se crea con más de un campo, ¿va reduciendo el performance cuando se accede a la tabla?
    (3) ¿Será lo mismo crear dos índices así:
    Índice 1: Campo1 – Campo2
    ………………………………
    Índice 2: Campo2 – Campo1?
    (4) Si el índice tiene más de campo y un Query accede a uno de los campos del índice, ¿toma ese índice como referencia para la extracción por referir a un campo del mismo o el Query debe hacerse FORZOSAMENTE hacia el primer campo del listado del índice para que pueda tomarlo y hacer la extracción como se espera?
    Gracias por su atención y felicidades por su portal.
    Saludos.

    • Gheorghe Valer Scurtu dice:

      Hola Pablo,
      Gracias por tu valoración.
      A continuación las respuestas a tus preguntas:
      (1) Cuando se crea una tabla base de datos Z, ¿en qué casos se determina si un índice debe contener un campo o más campos?
      Se determinan en función de las lecturas que se van a realizar. Normalmente por los SELECT que se ejecutan frecuentemente.
      (2) Cuando el índice se crea con más de un campo, ¿va reduciendo el performance cuando se accede a la tabla?
      Depende. Se mejora el tiempo de recuperación si en el WHERE se utilizan todas las columnas del índice y se reduce el tiempo si en el WHERE se utilizan solo algunas de la columnas.
      Los índices compuestos también conllevan el costo de velocidades de escritura más lentas y un mayor espacio de almacenamiento. Las opciones de qué campos deben comprender un índice compuesto y cómo ordenar estos campos se pueden determinar considerando lo siguiente:
      I. Si ciertos campos tienden a aparecer juntos en las consultas, es una buena idea crear un índice compuesto en ellos.
      II. Si tenemos lecturas por CAMPO1 y también lecturas por CAMPO1 y CAMPO2 se recomienda crear un índice por el CAMPO1 y luego crear otro índice compuesto por CAMPO1 y CAMPO2, ya que este escenario cubre los dos casos de lecturas por CAMPO1 y lecturas por CAMPO1 y CAMPO2.
      (3) ¿Será lo mismo crear dos índices así:
      Índice 1: Campo1 – Campo2
      ………………………………
      Índice 2: Campo2 – Campo1?

      Si, aunque se recomienda utilizar el orden que aparece en la definición de la tabla.
      (4) Si el índice tiene más de campo y un Query accede a uno de los campos del índice, ¿toma ese índice como referencia para la extracción por referir a un campo del mismo o el Query debe hacerse FORZOSAMENTE hacia el primer campo del listado del índice para que pueda tomarlo y hacer la extracción como se espera?
      Vea la respuesta II de la anterior pregunta.
      Un saludo.

  3. William dice:

    Hola, porqué cuando creo un registro en una tabla z y coloqué el campo como clave no da error si trato de incluir un valor repetico en ese campo clave? sin embargo no crea registros repetidos.

    la instruccion que uso es la siguiente:
    wa_tabla-MANDT = ‘200’.
    wa_tabla-CODIGO = ‘2’.
    wa_tabla-descripcion = ‘PRUEBA’.

    INSERT INTO zfi_tabla VALUES wa_tabla.
    COMMIT WORK.

  4. Daniel dice:

    ¿Tras generar un indexado nuevo hay que forzar la regeneración de índices de algún modo para que los datos que ya existiesen en la tabla tengan el indexado también?
    Si es así, ¿Cómo se fuerza la regeneración de los datos de los índices?
    Muchas gracias

    • Laura dice:

      Hola Daniel,

      Cuando se crea un nuevo índice en una tabla de base de datos en SAP ABAP, generalmente no es necesario forzar la regeneración de los índices para que los datos existentes sean indexados. SAP maneja automáticamente la actualización de los índices al crear o modificar datos en la tabla.

      Sin embargo, si por alguna razón se requiere asegurarse de que todos los datos existentes en la tabla estén indexados según el nuevo índice, se puede realizar una reorganización de la tabla. Este proceso garantiza que los índices se actualicen correctamente y que la tabla esté optimizada. Algunas de las opciones pueden ser las siguientes:

      Utilizar la transacción DB02: Esta transacción permite verificar el estado de los índices y realizar operaciones de mantenimiento.

      Transacción SE14 (Database Utility): En esta transacción se puede seleccionar la tabla y ejecutar la opción de “Rebuild Indexes” o “Reorganize”. Este proceso puede llevar tiempo dependiendo del tamaño de la tabla y de la base de datos.

      Un saludo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *