PDA

Ver la Versión Completa : Performance en select


mystic_soul
08/04/08, 17:47:25
Hola gente! como va? necesito la ayuda de ustedes urgente!!
Tengo que darle performance a estos select.. se puede?

Este es uno..

SELECT b~werks c~vkorg c~vtweg a~pkunag a~pkunre a~spmon a~matnr
c~fkart b~pstyv a~fkimg b~wavwr c~waerk b~kzwi3 b~kzwi1
a~sptag b~vbeln b~posnr
INTO TABLE it_s900
FROM s900 AS a
INNER JOIN vbrp AS b
ON a~vbeln = b~vbeln
AND a~posnr = b~posnr
INNER JOIN vbrk AS c
ON b~vbeln = c~vbeln
FOR ALL ENTRIES IN it_ausp
WHERE a~matnr EQ it_ausp-matnr
AND a~pkunag IN s_pkunag
AND a~pkunre IN s_pkunre
AND a~fkart IN s_fkart
AND a~waerk EQ p_waers
AND a~sptag IN s_sptag
AND b~pstyv IN s_pstyv
AND c~vkorg IN s_vkorg
AND c~vtweg IN s_vtweg
AND c~bukrs EQ p_bukrs.

SORT it_s900 BY werks vkorg vtweg pkunag pkunre
spmon matnr fkart pstyv.

*****************
Este es el otro...

SELECT a~matnr a~mfrnr INTO TABLE it_mara
FROM ( mara AS a
INNER JOIN mvke AS b
ON a~matnr = b~matnr )
WHERE a~matnr IN s_matnr " Material
AND a~spart IN s_spart " Sector - Linea de Negocios
AND a~extwg IN s_extwg " Autor
AND a~mfrnr IN s_mfrnr " Editor
AND a~profl IN s_profl " Tema
AND b~mvgr3 IN s_mvgr3 " Sello Editorial
AND b~vkorg IN s_vkorg " Organizacion de Ventas
AND b~vtweg IN s_vtweg. " Canal de distribución

SORT it_mara BY matnr.

Desde ya se los voy a agradecer!!!

DavidXD_XD
08/04/08, 22:41:04
Hola, la segunda consulta la veo bien .. ya que MARA y MVKE estan jalandose de llaves principales, lo que si podria ayudar es que si con los parametros que ingresas puedas sacar algun canal de distribucion o una organizacion de ventas, y con respecto a la primera consulta tengo un problema con la tabla S900, supongo que es por la version, resulta que en la S900 no tengo los campos vbeln ni posnr, pero el JOIN entre cabecera (VBRK) y detalles (VBRP) si va bien ....

ballan
09/04/08, 10:52:36
Buenos dias

Aqui van unas recomendaciones generales para SELECT

1.- Los inner join SIEMPRE deben ser por campos claves o campos indexados, es preferible meter algun tabla de mas pero que las uniones del join sean por campos clave o indexados

2.- El orden de las tablas en el join debe ser primero la que mas registros restringe, terminando por la que menos restringe de todas, por ejemplo en tu primer select probablemente la que mas restringe es la S900, luego la VBRK y luego la VBRP

3.- Los campos que se ponen en la clausula select (por ejemplo b~werks c~vkorg c~vtweg ... debes ponerlos en orden, suponiendo que haces el join primero por la S900 luego VBRK y luego VBRP tendrias que poner los campos que seleccionas por orden, todo esto que te digo tambien es aplicable para la clausula where

4.- En el primer select podrias ayudarte de las tablas indices standar que tiene SAP (en tu caso seria la VRPMA indice de facturas por material) en caso de que en la S900 los campos vbeln y posnr no sean claves

ibecerra
09/04/08, 13:28:56
has una cosa mas..
de vez validar que la tabla it_ausp este llena.. sino vas a tener problemas y va tratar de buscar toda la infromacion de las demas tablas.. mucho ojo..
create una vista de visualizacion y me las tablas ... y cheque cuando se demora.. a mi me funciona bien.

mystic_soul
09/04/08, 15:02:10
gracias a todos por responder!
la it_ausp va a tener algun valor, por lo que puse la condicion de que si esta tabla llegara a ser initial, no hace el primer select. Voy a probar lo de la vista de visualizaciòn..
Me interesa lo de las tablas indice.. como se maneja en el programa?
gracias!