Bookmark Lookup , por que ?

24/05/2007 - 18:49 por Penta | Informe spam
Estimados.
Leyendo unos valiosos articulos sobre "UPDATE STATISTICS" de Don
Alejandro Mesa me puse a probar
Todo esto en un servidor de pruebas SQL 2000 SP4.
En la siguiente query me indica que hace un Bookmark Lookup.

SELECT C.CODCARR, C.NOMBRE_C
FROM MT_CARRER C
INNER JOIN MT_ALUMNO A ON A.CODCARPR=C.CODCARR
WHERE A.ESTACAD='VIGENTE' AND A.ANO_MAT 07 and
a.codcarpr='11000'
GROUP BY C.CODCARR, C.NOMBRE_C
ORDER BY NOMBRE_C


No se como mostrar el plan de ejecucion como texto, asi que lo
escribire aca:

Select - Stream Aggregat Nested Loops -
MT_carrer.IX_MT_CARRER
0 % 0%
0% 1%
-
Filter -- Bookmark Lookup - MT_Alumno.IX_MT_ALUMNO11

1% 98% 1%

Con dichos datos cree un indice en la tabla MT_CARRER codcarr,nombre_c

Pero Aun asi sigo
Que estoy haciendo mal ?
Lei los articulos de Don Alejandro Mesa, y entendi entre otras cosas
que "SQL Server debe hacer una operación "Bookmark lookup" (ir a leer
la data en la tabla)" con eso entiendo que hay algo "malo" o falta
algun indice ? si encuentra un Bookmark Lookup ?

Les agradeceria su valioso aporte.

Atte,
Cristian.

Preguntas similare

Leer las respuestas

#6 Penta
24/05/2007 - 23:37 | Informe spam
El error que estaba cometiendo era que volvia a presionar el icono del
plan de ejecucion Ctrl+L.

Ahora me funciono de maravillas.

Gracias Mil Gracias.
Respuesta Responder a este mensaje
#7 Jesús López
25/05/2007 - 09:47 | Informe spam
SQL Server hace un bookmark lookup cuando está utilizando un índice no
agrupado para resolver la consulta, pero no todos los campos que necesita
SQL Server para resolver la consulta están en la clave de índice, por eso
SQL Server tiene que ir a la tabla a buscar el resto de los campos.

Para optimizar la consulta necesitarías un índice en MT_CARRER C con los
campos CODCARR,
NOMBRE_C. Y otro índice en MT_ALUMNO A con CODCARPR, ESTACAD, ANO_MAT.


¿Por qué no le pasas esta consulta al Asistente para Optimización de
Índices?´. Es lo mejor para confirmar lo que estoy diciendo.

Por cierto, para ver el plan de ejecución estimado debería usarse SET
SHOWPLAN_ALL ON ya que cuando se usa SET SHOWPLAN_TEXT ON se proporciona muy
poquita información.

Para ver el plan de ejecución real se usa SET STATISTICS PROFILE ON.

Otra cosa que se usa mucho para comparar la ejecución de consultas es SET
STATISTICS IO ON que hace que se muestren las lecturas que requiere una
consulta.


Saludos:


Jesús López
www.soldq.com



"Penta" escribió en el mensaje
news:
Estimados.
Leyendo unos valiosos articulos sobre "UPDATE STATISTICS" de Don
Alejandro Mesa me puse a probar
Todo esto en un servidor de pruebas SQL 2000 SP4.
En la siguiente query me indica que hace un Bookmark Lookup.

SELECT C.CODCARR, C.NOMBRE_C
FROM MT_CARRER C
INNER JOIN MT_ALUMNO A ON A.CODCARPR=C.CODCARR
WHERE A.ESTACAD='VIGENTE' AND A.ANO_MAT 07 and
a.codcarpr='11000'
GROUP BY C.CODCARR, C.NOMBRE_C
ORDER BY NOMBRE_C


No se como mostrar el plan de ejecucion como texto, asi que lo
escribire aca:

Select - Stream Aggregat Nested Loops -
MT_carrer.IX_MT_CARRER
0 % 0%
0% 1%
-
Filter -- Bookmark Lookup - MT_Alumno.IX_MT_ALUMNO11

1% 98% 1%

Con dichos datos cree un indice en la tabla MT_CARRER codcarr,nombre_c

Pero Aun asi sigo
Que estoy haciendo mal ?
Lei los articulos de Don Alejandro Mesa, y entendi entre otras cosas
que "SQL Server debe hacer una operación "Bookmark lookup" (ir a leer
la data en la tabla)" con eso entiendo que hay algo "malo" o falta
algun indice ? si encuentra un Bookmark Lookup ?

Les agradeceria su valioso aporte.

Atte,
Cristian.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida