Una de Mysql
Alvaro Herrera
alvherre en dcc.uchile.cl
Mie Jun 23 21:13:41 CLT 2004
On Wed, Jun 23, 2004 at 05:48:01PM -0400, Horst von Brand wrote:
> Juan Carlos Inostroza <jci en tux.cl> dijo:
>
> > Segun se, la clausula order by es para los selects. Y efectivamente,
> > cuando agregas un registro este queda al final de la tabla.
>
> En terminos logicos, lo agrega a la tabla, que es un _conjunto_ (no hay
> orden!). Que la implemente en forma secuencial es puramente
> conincidencia... estoy seguro que si borras cosas del medio, reusa la
> posicion tambien. Y si tiene claves (y es menos que _totalmente_ idiota)
> usara hashing internamente (y es seguro que otra version usara un orden
> distinto, etc).
Y no solo eso, sino que ademas un mecanismo para extraer las filas de la
tabla puede dar resultados distintos a otro. Por ejemplo, si se usa un
recorrido de indice lo mas probable es que se obtengan en el orden del
indice; si se usa un recorrido secuencial del heap, lo mas probable es
que se obtengan en el orden fisico.
Por ejemplo, otra implementacion puede hacer un recorrido del indice
completo y luego ordenar los identificadores segun la posicion del heap,
para optimizar los movimientos de los cabezales del disco. En este caso
el orden puede ser distinto a los dos anteriores.
Cuando Postgres introdujo el concepto de "hash-based aggregation" (en la
version 7.4) mucha gente se quejo de que los resultados ya no se
entregaban en orden, como antes. Que no te suceda esto!
Con respecto a lo de que al agregar un registro queda al final de la
tabla, esto no es necesariamente asi: por ejemplo en Postgres al hacer
recoleccion de basura puede quedar espacio libre en paginas al principio
de la tabla, y nuevas tuplas se insertaran en ese espacio.
--
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"The eagle never lost so much time, as
when he submitted to learn of the crow." (William Blake)
Más información sobre la lista de distribución Linux