Vista Error Tiempo de espera pero...

Tengo dos vistas agrupadas sumando las compras por mes y articulo del 2008, y en otra la del 2009.
Luego tengo una tercera vista donde simplemente relaciono mes y articulo (de momento no hago ningún calculo por simplificar los posibles errores), y me da error en:
Termino en tiempo de espera.
Per más raro todavía si hago la tercera consulta en access no me da error pero la misma en access y filtro por solo 1 mes, me da de nuevo el mismo error.
¿Alguien me sabe decir la causa? Realmente es una consulta más bien sencillota.

2 respuestas

Respuesta
1
Tu puedes tener la impresión de que la consulta es sencilla, ¿pero realmente lo es?
Recuerda que el sql es una herramienta que trabaja en base a indicies y si no tienes nada definido pues tus búsquedas cuando hagas join serán muy pesadas, te recomiendo que revises las consultas de tu join y veas si es necesario crear un indice, si usas SQL Server 2005 puedes utilizar el Database Tuning Advisor que esta en tools en el management studio.
Gracias Bownsea por la ayuda.
También pensé en lo mismo que me comentas de crear indices, pero nunca he realizado indices en vistas, estuve un par de días intentándolo con documentación del internet pero no lo logre.
Tengo SQL 2000 server enterprise, utilizado para un ERP estándar(RPS). Según he leído para crear indices en vistas, las tablas a las que hace referencia debieran ser creadas en algún formato determinado.
He realizado pruebas en una bd de pruebas y aunque no lo he conseguido, me daría miedo pasarlo a la real, no se si afectaría en algo al ERP.
No obstante ¿me podrías decir como crear indices? Igual es más sencillo de lo que pienso.
Gracias, de nuevo
Eladio
El tema de indices en vistas es bueno, pero lo que te recomiendo es que en los qrys que crean las vistas es donde apliques el tema de indices, y consideres para ellos las columnas que usas en tu where.
También te recomiendo que uses el plan de ejecución para que veas que es lo que necesitas, esta utilidad es de mucha ayuda para este tipo de situaciones donde uno piensa que el query es sencillo pero el sql no lo hace así, todos hemos pasado por eso.
Cualquier consulta adicional me avisas.
No te entiendo o no se que son los indices que indicas.
Tampoco conozco la utilidad plan de ejecuccion. ¿Dónde esta? Voy a buscar por el internet más informacino de todo esto. Si me ayudas muchísimo mejor.
Grache
Eladio
Ok,
Te explico lo de las vistas..
Esta es una vista
Create view nombre
As
select a.dato1, a.dato2, b.dato3
from tabla1 a inner join tabla2 b on a.id= b.id
Yo te sugerí que uses un afinamiento de indices en el query entre tabla1 y tabla2, podrías hacerlo en la vista pero deja eso en ultima opción.
Con respecto al plan de ejecución, puedes hacer lo siguiente, sombre tu query y presiona Ctrl+L, sino lo entiendes no te preocupes, es un tanto complicado hacerlo, pero por lo menos hay algunas cosas que podrías ver y saber como es que funciona tu qry.
ME avisas como te va si aun necesitas.
Acabo de ejecutarlo como dices con CTRL+L. Esta bastante bien, no lo conocía.
Aparece un árbol con todas las operaciones y aunque aparece como completado proceso por lotes, tan solo se ejecuta las tablas y index seek, de nivel más bajo entre el 15% y el 50%.
¿Cómo puedo mejorar entonces la consulta?
Aquí lo puntual es lo siguiente, tu debes tener que todas tus consultas sean index seek= significa que usa su indice.
Lo que debes evitar y enfocarte es en lo es Full Table Scan o Index Scan, significa que no tiene indice o que tiene pero no lo usa, respectivamente.
Perdona por abusar..., pero ya veo que me ignorancia en todo esto es bastante grande.
Lo que me quieres decir, que cuando se creo una consulta le puedo indicar un indice. ¿Cómo?
¿Me podrías concretar? Teniendo la consulta de ejemplo anterior:
select a.dato1, a.dato2, b.dato3
from tabla1 a inner join tabla2 b on a.id= b.id
como utilizaría la instruccion index seek=
Parece que te confundí un poco.
Acá son dos casos:
1. Asumamos que para el query que usé no hay indice en a.id y b.id, en ese caso deberías crear un indica en sus tablas respectivas para que la consulta sea más rápida.
2. En el tema del plan de ejecución, el index seek no es un comando ni nada de eso, lo que te decía es que en los gráficos, cuando veas etiquetas que dicen index scan o table scan, significa que las tablas (para ver las tablas pasa el mouse por encima) involucrada no tiene un indice definido, para lo que debes que ubicar esa tabla en tu qry y ver que indice podrías agregarle.
Ahora sí que te pillo.
Seria añadir a la consulta el nº mayor de campos con indices para que la consulta vaya más rápido.
Acabo de comprobar..., y no aparece nada de ndex scan o table scan en el plan de ejecuccion. Si algo de Bookmark Lookup, pero mañana más tranquilo lo mirare con más cariño.
Muchas gracias, me has ayudado bastante, espero que con todo esto que me has enseñado lo pueda solucionar.
Ok,
Suerte en ello, no te olvides de cerrar la pregunta.
Respuesta

Excellent and intriguing essay. Thank you very much! Thank you for sharing this outstanding content. poppy playtime is a blog that will help you recover your password and regain access to your account if you've lost it.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas