2011-01-14 23 views
5

En this O'Reilly presentation, hay un párrafo introducir algunos conceptos clave para la comprensión de MySQL explico:bucles anidados en MySQL

¿Qué es un JOIN?

  • Todo es una combinación, ya que MySQL utiliza siempre anidados-bucles
  • Incluso una sola mesa SELECT o una unión o una subconsulta

Puede alguien explicar cómo funciona esto para un solo tabla SELECCIONAR?

Respuesta

2

bucles anidados es una manera de procesamiento une:

for each row of table A 
    if this row matches where clauses 
    for each row of joined table B 
     if this row matches where clauses and join clauses 
     accept row 
     end 
    end 
    end 
end 

que puede ser optimizado con índices un poco, haciendo "para cada fila que se encuentra en clave K en algún índice" en lugar de "cada fila de tabla A ", y lo mismo con la tabla B.

La presentación dice que esta es la única forma en que los procesos MySQL se unen. Existen otros métodos que pueden utilizarse, pero MySQL no los implementa. Esta entrada de OraFAQ proporciona varios que implementa Oracle: http://www.orafaq.com/tuningguide/join%20methods.html Similarmente: http://oracle-online-help.blogspot.com/2007/03/nested-loops-hash-join-and-sort-merge.html

"Todo es una unión" es solo un detalle de implementación, creo. No realmente tan importante.

+0

He preguntado acerca de las selecciones de SINGLE TABLE en MySQL, por lo que su respuesta no se aplica. Puedes pensar que "no es tan importante", pero yo sí. Todavía me gustaría que * mi * pregunta sea respondida. – RADA

+0

@RADA: No estoy seguro de cómo MySQL convierte una selección de una sola tabla en una combinación. ¿Tal vez se una a una tabla ficticia con una fila, o una a la izquierda a una tabla ficticia de cero filas? Supongo que el código fuente de MySQL lo diría con seguridad. – derobert

Cuestiones relacionadas