Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

optimizar una consulta

Estas en el tema de optimizar una consulta en el foro de Bases de Datos General en Foros del Web. buenas, tengo un consulta simple, que paso como parametros el mes y el año, los registros que trae esa consulta es de 108.950 filas, y ...
  #1 (permalink)  
Antiguo 15/08/2008, 10:37
 
Fecha de Ingreso: enero-2002
Ubicación: Callao - Perú
Mensajes: 1.127
Antigüedad: 22 años, 3 meses
Puntos: 0
optimizar una consulta

buenas, tengo un consulta simple, que paso como parametros el mes y el año, los registros que trae esa consulta es de 108.950 filas, y el tiempo de esa consulta es de 25 segundos, habrá alguna manera para poder optimizar esta consulta, a pesar de que mi tabla tiene 3 llaves y le asignado indices, el ejemplo, de mi consulta es el sgte:

SELECT * FROM TABLA1 WHERE month(CampoFecha) = 3 AND year(CampoFecha) = 2008
__________________
SaLuDoS dE:
PePeLuChO dEl PeRú PaRa El MuNdO
  #2 (permalink)  
Antiguo 15/08/2008, 10:43
 
Fecha de Ingreso: agosto-2008
Ubicación: manta-city
Mensajes: 1
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: optimizar una consulta

disculpame pero no tiene sentido .........!
  #3 (permalink)  
Antiguo 15/08/2008, 12:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: optimizar una consulta

Código:
SELECT * 
FROM TABLA1 
WHERE (MONTH(CampoFecha) = 3 AND YEAR(CampoFecha) = 2008);
...prueba.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 15/08/2008, 14:27
 
Fecha de Ingreso: enero-2002
Ubicación: Callao - Perú
Mensajes: 1.127
Antigüedad: 22 años, 3 meses
Puntos: 0
Respuesta: optimizar una consulta

gracias gnzsoloyo, pero sigue demorando la consulta, me he percatado, en la demora de la consulta, q en el campoFecha, tengo como registros las fechas de esta forma '2008-06-01 00:00:00.000', entonces en mi consulta yo hago una conversion de month y year, y esa conversion lo realiza a los 108.000 registros q trae la consulta, hago esa consulta, pq quiero traer el mes y año de esos registros, cómo puedo utilizar otra forma de conversion de fechas, para traer un conjunto de registros de un rango dado
__________________
SaLuDoS dE:
PePeLuChO dEl PeRú PaRa El MuNdO
  #5 (permalink)  
Antiguo 18/08/2008, 10:20
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 4 meses
Puntos: 6
Respuesta: optimizar una consulta

El campo CampoFecha es parte del indice? si no entonces deberías considerar si sería buena idea que estuvuera.

Puedes intentar con esto...

Código:
SELECT * 
FROM TABLA1 
WHERE CampoFecha Between '20080301 00:00:00.000' And '20080331 23:59:59.999'
Saludos!
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....

Última edición por Gabo77; 18/08/2008 a las 10:35
  #6 (permalink)  
Antiguo 18/08/2008, 11:31
 
Fecha de Ingreso: agosto-2008
Mensajes: 6
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: optimizar una consulta

Cita:
Iniciado por pepelucho Ver Mensaje
buenas, tengo un consulta simple, que paso como parametros el mes y el año, los registros que trae esa consulta es de 108.950 filas, y el tiempo de esa consulta es de 25 segundos, habrá alguna manera para poder optimizar esta consulta, a pesar de que mi tabla tiene 3 llaves y le asignado indices, el ejemplo, de mi consulta es el sgte:

SELECT * FROM TABLA1 WHERE month(CampoFecha) = 3 AND year(CampoFecha) = 2008
/* RESPUESTA */

En primer lugar estimado, es necesario sacar el "select *", no es una buena practica, por otro lado te aconsejo en los from de los select continuar con un nolock, de esta manera tu consulta no bloquera las paginas sql que estas consultando.
Por otro lado es necesario saber si tu base de datos es OLTP u OLAP, si es OLTP lo ideal es que este en unos discos en RAID 1+0, si esta en OLAP, lo ideal es que este en discos en RAID 5. Por otro lado lo que debes ver es si tienes insert, delete o update mientas consultas la tabla, ya que esto si bloquea la tabla y el select debe esperar que un Insert, Delete o Update terminen su proceso.
Si es asi, te aconsejo duplicar la informacion en otra tabla de solo consulta y si puedes en una base de datos de gestion.
Espero te sirva la respuesta, un saludo

CARANCOR
  #7 (permalink)  
Antiguo 18/08/2008, 11:40
 
Fecha de Ingreso: agosto-2008
Mensajes: 6
Antigüedad: 15 años, 8 meses
Puntos: 1
Respuesta: optimizar una consulta

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Código:
SELECT * 
FROM TABLA1 
WHERE (MONTH(CampoFecha) = 3 AND YEAR(CampoFecha) = 2008);
...prueba.
Respecto a lo anterior, cuidado con los select * ya que el indice es optimo cuando haces una consulta bien acotada, tu consulta recorre todo un mes por lo que el calculo interno del SQL evalua si es mas rapido traer por indice o hacer un fullscan, cuando hay select * la mayoria de las veces hace un fullscan, por eso hay que sacarlo.
Por otro lado, es necesario hacer mantencion a tus bases, esto mejora tu performance, es decir, Regenerar estadisticas, reorganizar y desfragmentar indices y por ultimo recompilar procedimientos, deben ser estas tres cosas para que realmente se optimice. por otra parte bueno sería que tu consulta estubiese como SP y no como una query normal.

Ejemplo:

CREATE PROCEDURE retornadatos @fecha as datetime
AS

SET NOCOUNT ON

SELECT
a,
b,
c
FROM
Tabla1 (nolock)
WHERE
MONTH(@fecha) = 3 AND
YEAR(@fecha) = 2008

Esto ayudara a la que la primera vez que se ejecute la consulta demore por la compilación del SP pero posteriormente lo hara considerablemente mas rapido.

Saludos

Claudio Arancibia
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:39.