Ver Mensaje Individual
  #4  
Antiguo 15-07-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Reputación: 30
jachguate Va por buen camino
En primer lugar, aclarar que los indices no son tan útiles para optimizar enfocado a la clausula Order by, como pueden serlo para la clausula where.

Por otro lado, la mejora en el rendimiento en cualquier caso, dependerá de la capacidad del optimizador del motor. Me he topado con consultas bastante complejas que en Oracle tardan una nada, y en otros motores, con la misma estructura, tardan mucho mas. Asi que cuando se diseña la estructura, y cuando se escribe la consulta, si se quiere realmente optimizar, hay que tener en cuenta el motor y sus características.

En casi cualquier caso (firebird, mySQL, oracle, etc), no dudo que una consulta del tipo:

Código SQL [-]
Select *
  from tabla
 where campo_unico = valor

Con una tabla, con digamos 500,000 registros...

pues si tenes un índice sobre campo_unico, tardará solo una fracción de segundo, pero si no tenes índice, podria ser hasta un minuto (ya dependerá del hardware).

En un caso hipotético de un motor de búsqueda, donde fácilmente tenes una consulta que te devuelve 100,000 registros (de una tabla con millones), digamos:

Código SQL [-]
Select titulo, url, rango
  from paginas_indexadas
 where (texto_pagina like '%delphi%en%espa_ol%'
            or texto_pagina like '%espa_ol en delphi%')
   and (texto_pagina not like '%kilyx%')
   and not (url starts with 'www.borland')
 order by rango desc, fecha_indexacion desc

Normalmente mostrarás solo un puñado de los primeros resultados. Digamos 25. (La forma de obtener solo los primeros 25 varia de acuerdo al motor de BD por eso no lo incluyo).

Bien, si el optimizador no es capaz de generar un plan que le permita ubicar los registros correctos y de una vez le devuelva los datos ordenados... pues habrá que esperar a tener los 100,000 resultados, ordernarlos y devolver los primeros 25!!. Eso podria demorar mucho tiempo para un navegante que está acostumbrado a la velocidad de google..

En cambio, si pueden venir ordenados de una vez, bastará con que el motor obtenga los primeros 25 y los devuelva. Podria ser un tiempo considerable, pero mucho menor que el anterior.

He puesto un caso exagerado, pero real para algunos (con suerte, creo).

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita