MUNDOSAP

MUNDOSAP (foro/index.php)
-   Programación ABAP IV (foro/forumdisplay.php?f=4)
-   -   Como optimizo una consulta con "SELECT SINGLE" (foro/showthread.php?t=1841)

dmgman 22/09/06 12:27:16

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:


No llevo mucho tiempo en Sap y no se me ocurre q alternativa podria tomar.
Gracias

conrad10ar 22/09/06 13:04:00

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.

maescobarl 22/09/06 14:27:44

create un indice en la tabla o una vista con un indice y listo!!!!

Espero te funcione

Jotabin 22/09/06 14:37:50

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.

maescobarl 22/09/06 14:43:09

Hola Jotabin, Gracias por reforzar mi comentario.

Saludos a todos

conrad10ar 22/09/06 14:53:32

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!:)

maescobarl 22/09/06 15:20:31

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

jmadera 22/09/06 15:51:39

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.

Jotabin 22/09/06 18:48:57

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.

Jotabin 22/09/06 18:50:07

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.


Husos Horarios son GMT. La hora en este momento es 20:53:19.

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