#1
|
|||
|
|||
Problema con indices de tablas
Hola a todos,
Tenía dos dudas en relación a los índices. A ver si alguien me puede ayudar: 1- ¿ Como se yo cual es el índice que el optimizador está eligiendo a la hora de realizar una consulta ? 2- Como puedo hacer que una consulta a base de datos me elija el índice que yo quiero? Creo que se hacer insertando un hint en código pero no tengo ni idea de l que es ni de como implementarlo. Muchas gracias a todos |
#2
|
|||
|
|||
%_HINTS DB6 '<IXSCAN TABLE=''TABLA'' INDEX=''"TABLA~N"'' />'
donde DB6 es tu base de datos. TABLA es la tabla a la que haces la selección. TABLA~N es el índice secundario que vas a utilizar. Esta línea va al final de las condiciones del where. Saludos |
#3
|
||||
|
||||
Hola, la que se da el trabajo de elegir el indice mas optimo es la misma BD, prueba con esto, entra al debugg d tu programa en ejecucion, y cuando llegues a la linea donde realizar el SELECT antes de darle F5, vete a la ST05 y activa el trace, luego realizar el paso correspondiente en tu progama (F5), y luego regresas a la ST05 a desactivar el trace, ahi dale en Trace Display y veras el SELECT que realizaste, posicionate sobre la linea cuando hace OPEN (no sobre FECTH) y dale en el boton EXPLAIN, ahi veras la sentencia en nativo que ejecutaste y al mismo tiempo abajo aparecera la tabla de acceso y el indice que eligio la BD, para forzar a la BD que no eliga por nosotros el indice a su criterio haces uso de la prolongacion de sentencia SELECT que menciona Zonanet, espero te pueda ayudar
__________________
David Carballido Córdova |
#4
|
|||
|
|||
Muchas gracias por vuestra ayuda. Mañana probaré a ver que tal.
Saludos |
#5
|
|||
|
|||
Hola. He hecho lo que me habeis dicho pero el código no me compila:
SELECT ltak~tanum ltak~vbeln ltap~tapos ltap~nltyp ltap~pvqui FROM ltak AS ltak INNER JOIN ltap AS ltap ON ltak~tanum = ltap~tanum AND ltak~lgnum = ltap~lgnum INTO TABLE l_t_tanum_silo WHERE ltap~lgnum EQ l_t_t346l-lgnum AND ltap~pquit EQ ' ' AND ltak~lgnum EQ l_t_t346l-lgnum AND ltak~kquit EQ ' ' AND ltak~queue EQ ip_queue. %_HINTS DB2 '<IXSCAN TABLE="LTAP" INDEX="LTAP~M"/>'. Me dice que la sentencia %_HINTS no está definida. Saludos y a ver si me podeis ayudar!!!! |
#6
|
||||
|
||||
Hola, prueba esta sentencia:
%_HINTS ORACLE 'INDEX ("LTAP" "LTAP~M")'.
__________________
David Carballido Córdova |
#7
|
|||
|
|||
Te sobra un punto: AND ltak~queue EQ ip_queue . la línea es parte de la consulta, entonces es punto va al final de la misma. saludos. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|