Optimizar Consulta en SQL

18/11/2006 - 02:27 por Juan Huachaca Gomez | Informe spam
Amigos tengo esta consulta:

select * from ato001compra
where convert(integer,CATEGO) = convert(integer,'1')
AND convert(integer,SUBCAT) = convert(integer,'3')
AND convert(integer,FABRICA) = convert(integer,'98')
AND convert(integer,MARCA) = convert(integer,'9998')
AND convert(integer,CONTEN) = convert(integer,'72')
AND convert(integer,CLASS01) = convert(integer,'4')
AND convert(integer,CLASS02) = convert(integer,'0')
AND convert(integer,CLASS03) = convert(integer,'0')
AND convert(integer,CLASS04) = convert(integer,'0')

consulto en una tabla con aproximadamente 2 999 546 345 registros me dijeron
algo de indices pero el problema es que la actualizacion se me hace lenta
como puedo optimizarlo ???

Por favor espero me puedan ayudar !!!!! es urgente

Salu2

Juan Huachaca Gómez
MSN: j_huachaca79@yahoo.es

Preguntas similare

Leer las respuestas

#1 Javier Loria
18/11/2006 - 03:01 | Informe spam
Hola Juan:
Parece que lo que tienes es un problema de diseño de la base de datos,
ya que CATEGO, SUBCAT, FABRICA, MARCA, CONTENT, CLASS01, CLASS02, CLASS003 y
CLASS04 deberian ser almaceandos como enteros eliminando la necesidad de de
hacer estas conversiones.
En todo caso podrias hacer:
=select * from ato001compra
where CATEGO = '1'
AND SUBCAT = '3'
AND FABRICA = '98'
AND MARCA = '9998'
AND CONTEN = '72'
AND CLASS01 = '4'
AND CLASS02 = '0'
AND CLASS03 = '0'
AND CLASS04 = '0'
O en sus defecto usar:
select * from ato001compra
where CATEGO LIKE '1%'
AND SUBCAT LIKE '3%'
AND FABRICA LIKE '98%'
AND MARCA LIKE '9998%'
AND CONTEN LIKE '72%'
AND CLASS01 LIKE '4%'
AND CLASS02 LIKE '0%'
AND CLASS03 LIKE '0%'
AND CLASS04 LIKE '0%'
Lo que igualmente ineficiente es poner un % adelante.
Saludos,


Javier Loria
Costa Rica-MVP
Solid Quality Learning

"Juan Huachaca Gomez" wrote in message
news:u3cr$
Amigos tengo esta consulta:

select * from ato001compra
where convert(integer,CATEGO) = convert(integer,'1')
AND convert(integer,SUBCAT) = convert(integer,'3')
AND convert(integer,FABRICA) = convert(integer,'98')
AND convert(integer,MARCA) = convert(integer,'9998')
AND convert(integer,CONTEN) = convert(integer,'72')
AND convert(integer,CLASS01) = convert(integer,'4')
AND convert(integer,CLASS02) = convert(integer,'0')
AND convert(integer,CLASS03) = convert(integer,'0')
AND convert(integer,CLASS04) = convert(integer,'0')

consulto en una tabla con aproximadamente 2 999 546 345 registros me
dijeron algo de indices pero el problema es que la actualizacion se me
hace lenta como puedo optimizarlo ???

Por favor espero me puedan ayudar !!!!! es urgente

Salu2

Juan Huachaca Gómez
MSN:

Respuesta Responder a este mensaje
#2 Ody Barrera
18/11/2006 - 03:49 | Informe spam
Hola Juan:

No entiendo muy bien que es lo que necesitas hacer una consulta o una
actualización.
Pero para mejorar el tiempo de respuesta tal vez podrías crear una tabla
temporal o una variable tabla con la clave principal y transformando estos
campos al tipo de dato que deseas.

Por ejemplo
SELECT <campo_PK>, convert(integer,CATEGO) AS catego,
convert(integer,SUBCAT) as subcat,
convert(integer,FABRICA) as fabrica,
convert(integer,MARCA) as marca,
convert(integer,CONTEN) as conten,
convert(integer,CLASS01) as class01,
convert(integer,CLASS02) as class02,
convert(integer,CLASS03) as class03,
convert(integer,CLASS04) as class04
into #temp
from ato001compra

Luego la relacionas con tu tabla original.

SELECT <campo1>, <campo2>, <campo3>, ... , <campo_n>
FROM #temp t
INNER JOIN ato001compra c ON (c.<campo_PK> = t.<campo_PK>)
WHERE t.CATEGO = 1
AND t.SUBCAT = 3
AND t.FABRICA = 98
AND t.MARCA = 9998
AND t.CONTEN = 72
AND t.CLASS01 = 4
AND t.CLASS02 = 0
AND t.CLASS03 = 0
AND t.CLASS04 = 0

Espero que pueda ayudarte esta solución alocada. Te recomiendo que listes
los campos no pongas "*".

Saludos.

Ody Barrera S.
Perú
"Juan Huachaca Gomez" wrote:

Amigos tengo esta consulta:

select * from ato001compra
where convert(integer,CATEGO) = convert(integer,'1')
AND convert(integer,SUBCAT) = convert(integer,'3')
AND convert(integer,FABRICA) = convert(integer,'98')
AND convert(integer,MARCA) = convert(integer,'9998')
AND convert(integer,CONTEN) = convert(integer,'72')
AND convert(integer,CLASS01) = convert(integer,'4')
AND convert(integer,CLASS02) = convert(integer,'0')
AND convert(integer,CLASS03) = convert(integer,'0')
AND convert(integer,CLASS04) = convert(integer,'0')

consulto en una tabla con aproximadamente 2 999 546 345 registros me dijeron
algo de indices pero el problema es que la actualizacion se me hace lenta
como puedo optimizarlo ???

Por favor espero me puedan ayudar !!!!! es urgente

Salu2

Juan Huachaca Gómez
MSN:



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida