Ver Mensaje Individual
  #10 (permalink)  
Antiguo 05/03/2010, 11:45
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: 16 años, 5 meses
Puntos: 2658
Respuesta: Como hacer un (sql o query) en mysql?

Código MySQL:
Ver original
  1. SELECT t1.campo1, t4.campo2
  2. FROM tabla1 t1
  3.       INNER JOIN tabla3 t3 USING(campo_relacion)
  4.       INNER JOIN tabla4 t4 on t3.campo_relacion=t4.campo_relacion AND t4.campo2>1234
  5.       INNER JOIN ...N  ...
  6. WHERE ...
Este es un caso especial, pero cumple las generales de la ley: SI no hay un índice no agrupado sobre t4.campo2, el efecto podría ser que MySQL omitiera esta cláusula si el valor indicado no se halla en el primer par de lecurtas de datos.

Me explico:
La teoría dice que en este caso lo que los DBMS hacen es leer los dos registros límite (inferior y superior). Si el inferior es mayor, debe leer toda la tabla, por lo que omite la cláusula. Si el límite superior es menor, omite la tabla y devuelve nulos.
Si está entremedio, leería el registro medio; en ese caso, si el medio es mayor, puede llegar a omitir la cláusula porque la cantidad de saltos para encontrar el punto de lectura equivaldría a más tiempo queel que usaría para leer la tabla entera.
Sólo si lo buscado está en el bloque superior, seguiría buscando, porque en ese caso como mucho leería la mitad de la tabla...
¿Se entiende un poco la idea.

Los diferentes DBMS implementan de diferentes formas esta idea, pero en principio el TableScan se hace cuando el tiempo medio de saltos es igual o superior a la mitad del tiempo de lectura total de datos.
Al menos eso decía la teoría.

Y sí: Cursé efectivamente este tema en la universidad, donde tuve profesores que explicaron el funcionamiento del costo de consultas...
De todos modos es un tema que se puede comprender bastante bien leyendo, sobre todo si has hecho algo de programación en C/C++, porque algunos conceptos se parecen.
Tengo todavía algunos apuntes que se pueden compartir, pero sería bueno pasarle la idea a los moderadores del foro para ver si hubiese un modo de implementar un almacen de documentos libres para los foristas...

¿Qué opinan?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)