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
  #1  
Viejo 22/09/06, 12:27:16
Avatar de dmgman
dmgman dmgman is offline
Senior Member
 
Fecha de Ingreso: feb 2006
Localización: Getafe
Mensajes: 149
Como optimizo una consulta con "SELECT SINGLE"

Hola a todos,
Me han encargado optimizar un report ya que el tiempo de ejecucion es demasiado elevado.
Tras analizarlo encuentro que casi la mitad de la ejecucion se va en un "SELECT SINGLE" a la tabla BSAS que contiene 5 millones de registros.
Esta es la famosa sentencia:

Código:
SELECT SINGLE bukrs belnr gjahr INTO (bsas-bukrs, bsas-belnr, bsas-gjahr) FROM bsas WHERE bukrs EQ bkpf-bukrs AND augdt IN r_budat AND augbl EQ bkpf-belnr AND blart NE 'ZI'.

No llevo mucho tiempo en Sap y no se me ocurre q alternativa podria tomar.
Gracias
__________________
Carpe Diem !!
Responder Con Cita
  #2  
Viejo 22/09/06, 13:04:00
conrad10ar conrad10ar is offline
Banned
 
Fecha de Ingreso: mar 2006
Mensajes: 299
Habría que ver bien como está el programa completo, pero lo primero que haría es cambiar el IN por un EQ.

Espero te sea de ayuda.
Responder Con Cita
  #3  
Viejo 22/09/06, 14:27:44
maescobarl maescobarl is offline
Member
 
Fecha de Ingreso: abr 2006
Mensajes: 60
create un indice en la tabla o una vista con un indice y listo!!!!

Espero te funcione
Responder Con Cita
  #4  
Viejo 22/09/06, 14:37:50
Avatar de Jotabin
Jotabin Jotabin is offline
Senior Member
 
Fecha de Ingreso: may 2006
Localización: Buenos Aires
Mensajes: 116
Que haya un IN no hace diferencia con un EQ... en definitiva un IN son varios EQs. El problema son los índices.

Para que un SELECT o SELECT SINGLE sea performante, el WHERE tiene que incluir todos los campos de la clave o todos los campos de alguno de los índices de la tabla.

Como dijo maescobarl, podés crearle un nuevo índice a la tabla para mejorar la performance.

Lo más recomendable suele ser buscar la forma de utilizar uno de los índices ya creados para la tabla, o en el mejor de los casos los campos clave, pero como esto no siempre es posible, como última opción podés crearle un nuevo índice que incluya los campos por los que accede tu select.
__________________
resistance is futile
Responder Con Cita
  #5  
Viejo 22/09/06, 14:43:09
maescobarl maescobarl is offline
Member
 
Fecha de Ingreso: abr 2006
Mensajes: 60
Hola Jotabin, Gracias por reforzar mi comentario.

Saludos a todos
Responder Con Cita
  #6  
Viejo 22/09/06, 14:53:32
conrad10ar conrad10ar is offline
Banned
 
Fecha de Ingreso: mar 2006
Mensajes: 299
Tienes razón, esa es la manera correcta, igualmente prueba en la consulta usar todos EQ y cambiarlos por IN, y la performance baja.

Saludos a todos!
Responder Con Cita
  #7  
Viejo 22/09/06, 15:20:31
maescobarl maescobarl is offline
Member
 
Fecha de Ingreso: abr 2006
Mensajes: 60
Compañeros,

Creo que de lo anterior surge un nuevo tema, el cual yo no estoy muy adentrado... el uso del TRACE (ST05), alguno de ustedes nos puede dar una catedra de como usarlo y saber especificamente que INDICE se esta ocupando al momento de ejecucion???.

Espero sus comentarios

Saludos
Responder Con Cita
  #8  
Viejo 22/09/06, 15:51:39
jmadera jmadera is offline
Junior Member
 
Fecha de Ingreso: sep 2006
Mensajes: 6
Wink Abaperos

según lei en unos datos que consegui por la internet una de las cosas principales que tenemos que hacer al momento de realizar un select es colocar las ? falsas delante y luegos las verdaderas, ademas creo que lo mejor es tratar de colocar la mayor cantidad de campos claves dentro del where es lo mejor.
Responder Con Cita
  #9  
Viejo 22/09/06, 18:48:57
Avatar de Jotabin
Jotabin Jotabin is offline
Senior Member
 
Fecha de Ingreso: may 2006
Localización: Buenos Aires
Mensajes: 116
Eso de las condiciones falsas por delante no lo conocía, pero sí tengo entendido que cuando la condición para uno de los campos del WHERE es negativa, ese campo no cuenta para el índice; es decir que, para asegurarte de que tu SELECT use un índice [que puede ser la clave principal] no sólo tenés que asegurarte de incluir todos los campos de ese índice, sino que además la condición con la cual los usás tiene que ser positiva.
__________________
resistance is futile
Responder Con Cita
  #10  
Viejo 22/09/06, 18:50:07
Avatar de Jotabin
Jotabin Jotabin is offline
Senior Member
 
Fecha de Ingreso: may 2006
Localización: Buenos Aires
Mensajes: 116
Ah, y sí... si alguien puede aportar una pequeña explicación o algún manual sobre el uso del TRACE, yo también lo agradecería mucho porque no tengo idea de ese tema.
__________________
resistance is futile
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 18:33:59.


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