Ver Mensaje Individual
  #4 (permalink)  
Antiguo 24/05/2010, 17:10
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 3 meses
Puntos: 2658
Respuesta: MySQL: ¿Los condicionales reducen el consumo de recursos?

Hay muchas consideraciones para hacer respecto de la optimización requerida para una consulta, use o no el WHERE.

Partamos desde el principio:
Una consulta es óptima cuando usa la menor cantidad de accesos a disco para leer la mayor cantidad de datos en la menor cantidad de bloques de memoria necesarios.


Esto se basa en que un DBMS no lee los registros secuencialmente, sino que lee bloques de datos de hasta 64 Kb. Entonces se considera que una consulta es óptima cuando requiere la menos cantidad de bloques a leer.

Entonces mientras menor sea el registro, más registros entrarán en cada bloque y por tanto, en tu ejemplo, si cada registro puede tener 500 bytes de longitud, pueden entrar 128 registros por bloque, y se necesitarán 3 bloques de memoria y 3 accesos a disco para leer los 300 registros mencionados, sin importar mucho si los buscas entre 10.000 registros o 10.000.000.
En lugar de eso, si la longitud del registro es de 100 bytes, pueden entrar 640 registros por bloque y es 1 acceso a disco...

El problema empieza a aparecer con los condicionales usados, y los índices que existan.

Sitéticamente:
1) Una búsqueda sobre un índice agrupado (clúster o PK) o un índice no agrupado (INDEX) no usan la misma cantidad de lecturas.
2) Una búsqueda sobre índices no agrupados tales que la condición sea >, <, >=, <= o <>, pueden requerir la lectura de toda la tabla para ser respondida.

Como verás, la cosa no es tan simple como si el WHERE usa más o menos recursos. Depende de cómo sea esa tabla, qué índices existan y qué es lo que tenga ese WHERE.

Respondiendo la última pregunta, los índices empiezan a ser necesarios cuando la consulta tiene una baja selectividad. Esto significa que cada clave o dato comparativo puede abarcar demasiados registros de la tabla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 24/05/2010 a las 17:16