Alternativas para agilizar consulta...

05/06/2008 - 03:13 por Francisco | Informe spam
Que tal Sres. tengo una tabla de aprox 5 millones de reg. y en dicha tabla
existe un campo 'codnivel' Char(20). Ejem: 020103050705.. Los 2
primeros(02), los 2 siguientes (01) y asi sucesivamente tienen un
significado. Ahora el campo tiene su indice y debo extraer informacion de
cualquier lugar de la cadena. Ejem:

Caso 1:
SELECT <campos>
FROM mytabla
WHERE LEFT(codnivel,2) IN ('01','02','03'..) --Esta consulta es lentisimo
<Ahora si lo cambio por (codnivel LIKE '01%' Or codnivel LIKE '02') y asi..>
se agilizar 3 veces puesto que si hace uso del indice. Pero aun asi siento
que es lento. He probado con los operadores y funciones conocidas pero no
logro agilizarlo masalguna sugerencia ???

Caso 2 (el mas usado)
SELECT <campos>
FROM mytabla
WHERE SUBSTRING(codnivel,5,2) IN ('03','04','07'...) --Esto es mas lento
todavia
<Aqui no tengo idea de como cambiarlo para que haga uso del indice>

Si hago uso del LEFT, SUBSTRING, IN ú otras funciones, la consulta es lenta
porque me parece que no hace uso del indice. Pero si utilizo el campo solo
sin nada que lo envuelva entonces es una bala la consulta. ¿Algunas
alternativas de como extraer la informacion de forma rapida ?..gracias.

Preguntas similare

Leer las respuestas

#11 Penta
05/06/2008 - 21:06 | Informe spam
Estimado Sergio E.
Pero si como dice Francisco NO puede tocar la base de datos, como hara
el trigger ?

Yo optaria por tocar la BD si o si, pues que el trigger lo ejecute la
empresa(no deberia cobrar por esto) si se quiere quedar tranquila.

Solo lo estan haciendo para ganarse unas monedas de mas.

Atte.
Penta.
Respuesta Responder a este mensaje
#12 Sergio E.
06/06/2008 - 02:31 | Informe spam
A ver tal vez me equivoque de termino (trigger), y lo entiendo asi:

Yo tengo un servidor de base de datos, con una base que ya esta en
produccion... esa es INTOCABLE (sea baseA), pero está en mi equipo, asi que
en ese mismo servidor e instancia, creo otra nueva base de datos (BaseB)..
con las tablas que necesito...
en la baseA no hago nada, y en la baseB creo un procedimiento que se ejecute
por decir, todas las noches a las 4 am, que haga algo como esto:

insert into baseb.dbo.tablamia select substring(codigo,1,2) as c1,
substring(codigo,3,2) as c2 from basea.dbo.tablacodigos

con lo que no toco la baseA y genero mi tabla necesaria para mi aplicacion

Saludos


"Penta" escribió en el mensaje
news:
Estimado Sergio E.
Pero si como dice Francisco NO puede tocar la base de datos, como hara
el trigger ?

Yo optaria por tocar la BD si o si, pues que el trigger lo ejecute la
empresa(no deberia cobrar por esto) si se quiere quedar tranquila.

Solo lo estan haciendo para ganarse unas monedas de mas.

Atte.
Penta.
Respuesta Responder a este mensaje
#13 Pablo Roca
06/06/2008 - 10:58 | Informe spam
En definitiva un Job.

Yo estoy de acuerdo tambien con eso. Si el cliente tiene un mal diseño pues
lo primero sería modificar ese diseño, que no se puede? pues buscarnos
alternativas. Con un Job como dices no se le toca nada.


Saludos,

Pablo Roca
La Coruna - Spain
http://www.portalfox.com
Respuesta Responder a este mensaje
#14 Penta
06/06/2008 - 19:22 | Informe spam
A pues eso si estimado Sergio E.
Pero con eso no solucionamos el problema de Francisco de modo de
agilizar la consulta, No veo porque motivo Francisco no tiene acceso a
crear una tablita al menos en esa BD y realizando el Job como tu
planteas no sera necesario crear el Trigger.

Repito:
"Podrias tener un tabla que se actualice con Trigger en dicha tbala
podria tener:
codnivel Char(20).
Nivel1 varchar(xx)
Nivel2 varchar(xx)
Indices por Nivel1 y Nivel 2 y Join con tu tabla con codnivel "

En vez del trigger que lo haga con un JOB no sera on line pero no
sabemos si le servira asi o no, si lo quiere on line insisto con el
trigger.

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