MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #11  
Viejo 25/09/06, 09:00:17
Avatar de dmgman
dmgman dmgman is offline
Senior Member
 
Fecha de Ingreso: feb 2006
Localización: Getafe
Mensajes: 149
Hola, gracias a todos, por la ayuda.

No se como realizar el indice o no entiendo a que os referis... no llevo mucho tiempo en este mundillo. Me podriais explicar a que os referis con el indice, creo q un ejemplo me vendria de perlas. Gracias
__________________
Carpe Diem !!
Responder Con Cita
  #12  
Viejo 25/09/06, 13:01:18
Avatar de Jotabin
Jotabin Jotabin is offline
Senior Member
 
Fecha de Ingreso: may 2006
Localización: Buenos Aires
Mensajes: 116
A ver... Supongo que sabés que toda tabla del diccionario ABAP tiene campos clave, ¿cierto?

El motivo principal para que exista esta "propiedad" de los campos que diferencia a los clave de los no clave, es la creación de un índice para los campos clave de la tabla.

¿Que qué es un índice? Es una especie de tablita, mucho más pequeña que la tabla a la cual "indexa", que contiene únicamente los campos clave de la tabla indexada y, por cada clave, un puntero que indica la posición del registro que corresponde a esa clave dentro de la tabla indexada.

O sea que termina siendo algo muy parecido al índice en un libro. Si uno quiere encontrar dónde empieza un determinado capítulo en un libro, es mucho más fácil ir al índice y fijarse el número de página que ir mirando una a una las páginas desde el principio.

Bueno, para la computadora es igual. Si tiene que recorrer la tabla registro a registro para encontrar el valor buscado, el trabajo realizado será mucho mayor que si hace una búsqueda binaria sobre el índice, y desde ahí accede directamente al registro buscado gracias al puntero que le indica dónde está almacenado.

Entonces, cuando un programa recupera datos de una tabla acotando la búsqueda a ciertos valores, la recuperación de datos será muchísimo más veloz si los campos por los que se acota la búsqueda son los campos clave de la tabla, ya que le permitiremos al sistema utilizar el índice creado.

Ahora, resulta que SAP, como toda base de datos decente, te permite crear también otros índices para la tabla aparte del índice principal, el de la clave. De esta manera, uno puede elegir los campos que se le ocurran (sean clave o no) y SAP solito se encarga de indexar la tabla según esos campos, es decir que crea una tablita ordenada por los campos indicados con referencias a la posición de cada registro dentro de la tabla principal. De esta manera, se pueden lograr velocidades de acceso similares a las que se consiguen accediendo por la clave principal de la tabla.

Espero que se haya entendido.
__________________
resistance is futile
Responder Con Cita
  #13  
Viejo 25/09/06, 13:03:49
Avatar de Jotabin
Jotabin Jotabin is offline
Senior Member
 
Fecha de Ingreso: may 2006
Localización: Buenos Aires
Mensajes: 116
btw, los índices para tablas son creados desde el diccionario de datos [Trx. SE11], con el botón "Índices".
Es bastante intuitivo, pero si llegás a tener algún problema consultá acá e intentaremos ayudarte.
__________________
resistance is futile
Responder Con Cita
  #14  
Viejo 25/09/06, 16:20:45
Avatar de dmgman
dmgman dmgman is offline
Senior Member
 
Fecha de Ingreso: feb 2006
Localización: Getafe
Mensajes: 149
Hola a todos.
Si ya he entendido que son los indices, la verdad que pese a haber pasado por ahi 600 veces, no los habia usado hasta ahora...

He estado comentandolo por aqui con los compañeros, y me han dicho que al usarlo, simplemente es necesario que en el select se establezca el mismo orden que existe en uno de sus indices.

Es decir, ej:
si tengo el indice:
Código:
mandt bukrs belnr gjahr prctr.
yo haria el siguiente select:
Código:
select bukrs budat hkont from bsas. SELECT DISTINCT bukrs belnr gjahr INTO CORRESPONDING FIELDS OF TABLE g_it_bsas FROM bsas WHERE augdt IN r_budat AND blart NE 'ZI'. ENDIF.
__________________
Carpe Diem !!

Úlima edición por dmgman fecha: 26/09/06 a las 06:45:54.
Responder Con Cita
  #15  
Viejo 26/09/06, 07:17:45
LouieBoy LouieBoy is offline
Member
 
Fecha de Ingreso: ago 2006
Mensajes: 86
Buenas, perdonad mi igonrancia, pero que ganais haciendo todo esto contra un select single con toda la clave y con la tabla indexada, micro segundos? nano segundos? vale la pena todo esto para ganar tan poco?

Saludos

LouieBoy
Responder Con Cita
  #16  
Viejo 26/09/06, 07:51:37
sealons sealons is offline
Junior Member
 
Fecha de Ingreso: feb 2006
Mensajes: 19
aupa gente,
La ST05 que tengo en este sistema me aparece en aleman, y no me acuerdo de los nombres en castellano, pero mas o menos a ver si nos entendemos . Lo he usado poco, pero se trata de marcar el acceso SQL-Trace en las opciones de la izquierda, viene por defecto. En las de la derecha activar el trace. En otro modo que ya tienes que tener abierto, realizas la ejecucion del programa que quieres analizar. Despues detienes el analisis en las opciones de la derecha, y finalmente examinas los resultados con otra de las opciones.
A mi me pone 'Trace einschalten' en la primera, activar trace; 'Trace ausschalten' en la tercera, interrumpir trace; y 'Trace anzeigen' en la cuarta, mostrar trace; seguro que a ti te viene en castellano.
Al mostrar el trace te aparece la ventanita con tu usuario...y al aceptar ves los accesos y tiempos de la ejecucion que hayas realizado, o de lo que sea que estes realizando en ese momento, para no liarse es mejor tener solo lo que interesa...
no se si te habre ayudado con tanto aleman , espero que si

saludos,
sealons.
Responder Con Cita
  #17  
Viejo 26/09/06, 07:56:26
Avatar de dmgman
dmgman dmgman is offline
Senior Member
 
Fecha de Ingreso: feb 2006
Localización: Getafe
Mensajes: 149
Smile

Hola a todos,
Al fin he conseguido usar un indice, pero dado que los existentes no tenian la composicion de campos y/o orden que necesitaba, he creado uno propio.
El proceso solo gracias a este indice ha bajado 30 segundos.
Aunque la verdad que creo que no hace mucha gracia que cada uno que necesite un acceso por determinados campos, coja y se cree uno. Vamos que ya me han dicho, que es una buena manera, pero que ya hay mucho indices...

Para los que como yo nos sabiamos de indices, os digo que el orden de campos del indice y de los parametros del select dentro de la sentencia where debe de ser la misma.

Espero q con esto valga, pq trabajar con tablas de BD tan grandes es una odisea hacer que sea eficiente.

Por cierto, he descubierto 2 transacciones q me han comentado q me serian de ayuda, los que se encuentran en las transacciones, ST04 y SM50. Si alguien los conoce, y me pudiera contar como interpretarlas y manejarlas, se lo agradeceria.
__________________
Carpe Diem !!

Úlima edición por dmgman fecha: 26/09/06 a las 07:59:36.
Responder Con Cita
  #18  
Viejo 04/10/06, 16:40:16
ballan ballan is offline
Senior Member
 
Fecha de Ingreso: oct 2006
Mensajes: 671
Los indices solo funcionan si se utiliza el operador de igualdad y el orden de las clausulas depende, generalmente es muy optimo poner los campos en el select y en el where en el mismo orden que estan en la tabla pero si hay una clausula que sabemos que es muy restrictiva deberia ir primero en la where, por otro lado la eleccion del indice por parte del motor del sgbd es algo bastante complicado pero hay una manera de "forzar" al select para que vaya por un determinado indice, aqui os dejo un ejemplo

SELECT k~vbeln k~augru k~zsfecins k~zsordser
p~posnr p~matnr p~pstyv p~uepos p~kwmeng
f~vbtyp_n f~rfmng f~erdat f~bwart
INTO TABLE i_informe
FROM vbak AS k
INNER JOIN vbap AS p ON k~vbeln = p~vbeln
LEFT OUTER JOIN vbfa AS f ON p~vbeln = f~vbelv
AND p~posnr = f~posnv
WHERE k~auart IN rg_auart
AND k~zsordser IN s_ordser
%_HINTS
ORACLE 'INDEX ("VBAK" "VBAK~Z01")'.

aqui forzaria al select a ir por el indice Z01 de la tabla vbak

otra forma que el estandar utiliza bastante para optimizar los select es partir los rangos en fragmentos mas pequeños y unir los resultados con select appending

Un saludo
Responder Con Cita
  #19  
Viejo 14/12/06, 14:04:18
worwa worwa is offline
Junior Member
 
Fecha de Ingreso: jun 2006
Mensajes: 4
LA transaccion ST05 se utiliza basicamente por los BASIS para medir las cuotas de las trazas SQL para utilizarla es preferible ingresar al sistema en el idioma ingles (ya que ingrasamos en español, el idioma en el cual se va a cargar es ALEMAN, -no me pregunten por que-) y alli seleccionamos el tipo de traza que queremos evaluar (si es SQL Trace, Enqueue Trace, RFC Trace o Buffer Trace) y se selecciona la opcion de la traza con los parametros que ella pida, entre las que se encuentran:

Activate Trace: Sirve para activar el medidor de la traza para todos los selects de los programas que este corriendo el usuario en curso.

Activate Trace with Filter: Sirve para activar el medidor de la traza para los selects de un programas que este corriendo el usuario en curso, en ese momento, podemos especificar la transacción, el nombre del programa, el usuario, la identificacion del proceso e include y podemos incluir o excluir de acuerdo a lo que necesitemos evaluar.

Deactivate Trace: Desactiva la traza SQL para que despues podamos ver el resultado de la Evaluacion el Display Trace.

Display Trace: Aqui se puede ver el resultado de el desempeño de la traza que decidimos evaluar, podemos especificar una serie de opciones que se nos presentan o simplemente activar con las que ya vienen por defecto.

Enter SQL Statment: Esta opcion evalua una Traza SQL que nosotros introduzcamos en el editor que se nos presenta en la pantalla, recomiendo no usar variables sino valores directamente.

En lo personal solo he utilizado en lo que se refire a los tipos de traza las SQL Trace (que miden las trazas SQL en tiempo de ejecución de un programa, para lo que hago un debugin del programa que contiene la traza a evaluar en un nodo y corro la trancación en otro) y las RFC Trace (que miden - a mi parecer - la conectividad entre las BAPIS y los web dinpro).

Espero haberles ayudado en algo.

P.D.: Todo lo anteriormente dicho lo he sacado de mi propia autoria y experiencia, cualquier cosa pueden contactarme a mi correo worwaenrique@yahoo.com.

P.D2.: Voy a ver si puedo Hacer una presentacion de anteriormente narrado y les escribo de nuevo.

Úlima edición por worwa fecha: 14/12/06 a las 14:06:35.
Responder Con Cita
  #20  
Viejo 14/12/06, 16:17:54
Mauricio Hidalgo Mauricio Hidalgo is offline
Senior Member
 
Fecha de Ingreso: may 2006
Localización: Santiago, Chile
Mensajes: 483
Aprovecho de comentar que en algunas querys es visto que le agregan unos HINTS para mejorar la performance.

Por ejemplo originalmente había esta query.

SELECT lednr bzobj kalnr kalka kadky tvers bwvar
kkzma posnr matnr werks typps lstar menge
meeht wrtfw_pos fwaer tpreis peinh pmeht wertn
INTO TABLE t_ckis
FROM ckis
FOR ALL ENTRIES IN t_keko
WHERE lednr = '00'
AND bzobj = t_keko-bzobj
AND kalnr = t_keko-kalnr
AND kalka = t_keko-kalka
AND kadky = t_keko-kadky
AND tvers = t_keko-tvers
AND bwvar = t_keko-bwvar
AND kkzma = t_keko-kkzma.

lentisima en PRD, la dejaron así

SELECT lednr bzobj kalnr kalka kadky tvers bwvar
kkzma posnr matnr werks typps lstar menge
meeht wrtfw_pos fwaer tpreis peinh pmeht wertn
INTO TABLE t_ckis
FROM ckis
FOR ALL ENTRIES IN t_keko
WHERE lednr = '00'
AND bzobj = t_keko-bzobj
AND kalnr = t_keko-kalnr
AND kalka = t_keko-kalka
AND kadky = t_keko-kadky
AND tvers = t_keko-tvers
AND bwvar = t_keko-bwvar
AND kkzma = t_keko-kkzma
%_HINTS DB6 'CONVERT_FAE_TO_CTE'
DB6 'USE_OPTLEVEL 0'.

y la performance de la query mejoró notablemente. Por decir algo
si antes se demorar 17000 mil segundos, habrá quedado en 500 segundos.

como?, ni idea!!, por que no he podido encontrar información acerca de esos HINTS.

dejó la inquietud, haber si alguien pillo en BD nos puede aclarar esto.

saludos a Todos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 00:09:57.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web