On Wed, Jun 23, 2004 at 05:48:01PM -0400, Horst von Brand wrote: > Juan Carlos Inostroza <[EMAIL PROTECTED]> 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)