Informix - Indices y ordenaciones

 
Vista:

Indices y ordenaciones

Publicado por Adolfo Santiago (1 intervención) el 24/01/2003 19:09:59
Tenemos una tabla con 600.000 registros de clientes. Hemos generado un indice por oficina y nombre de cliente y hemos introducido la siguiente query:
select * from clientes
where oficina = 'A' and nombre like 'B%'

La ejecución de la query es inmediata.

Sin embargo al realizar la siguiente query:

select * from clientes
where oficina = 'A' and nombre like 'Z%'

la ejecución de la query tarda unos 30 segundos.

Sabe alguien porque ocurre esto y como se puede solucionar para que se comporte como la primera query.

Además porque al añadir a la select la sentencia ORDER BY oficina,nombre no utiliza el indice y la query tarda unos 4 minutos en ejecutarse.

Muchas gracias.
la
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Indices y ordenaciones

Publicado por Kike (3 intervenciones) el 24/01/2003 21:22:46
Los Operadores like y matches obligan al informix a realizar una búsqueda secuencial, de ahí la diferencia de tiempos como bien supondrás.
Al usar el "order by" en la otra cuestión, y como me supongo ese campo oficina tiene muy pocos valores distintos con lo cual a veces no es ni recomendable indexar esos campos (teoría diseño índices en BD relacionales), es más, su uso es contraproducente como te está ocurriendo.
Mi experiencia me dice que en estas ocasiones, y siempre dependiendo del número de registros que esperes que te devuelva la consulta, lo metas en un array y lo ordenes (quick-sort). Suele ser mucho más rápido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Indices y ordenaciones

Publicado por Sole (3 intervenciones) el 13/08/2010 23:34:05
Estimado Kike... como puedo crear en un SP un array??? para ejecutar las consultas?????.
A la espera de tu respuesta... y gracias de antemano

Sole!.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Indices y ordenaciones

Publicado por LUIS OCTAVIO RIVALDO BLANQUICE (78 intervenciones) el 27/01/2003 14:38:39
Te recomiendo que pruebes en tu select lo siguiente
select * from clientes
where oficina = 'A' and nombre[1,1]='B'. Esto es equivalente a la consulta del like, pero es mucho mas eficiente, por que con lo del like debe hacer como ya lo dijo Kike hace una busque secuencial mas lenta que comparando solamente la primera posicion del campo. Por que digo que es mas rapida de esta forma. Utiliza en tu dbaccess o isql la sentencia set explain on ; y observas en el archivo cuando tiempo le toma al script con el like y despues lo haces de la forma que te propongo y compara los resultados.
Espero que te sirva.


Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Indices y ordenaciones

Publicado por Sole (3 intervenciones) el 13/08/2010 23:32:53
oye que super... esta funcion .. no la conocia!!! la del ...nombre[1,1]='B'. .... una consulta... Necesito por SP de Informix poner varias consultas en orden DENTRO DE UN ARRAY para luego ejecutarlas..., como puedo crear el array????... y mil gracias por la sentencia :)... a la espera de tu respuesta...

Sole!.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar