2009-04-07 19 views
17

Supongamos que se cambia el orden predeterminado de un MySQL-mesa (ISAM) ejecutando:Orden predeterminado de pedidos en MySQL (ALTER TABLE ... ORDER BY ...;)

ALTER TABLE tablename ORDER BY columnname ASC; 

A partir de ahora ¿Estoy garantizado para obtener registros recuperados de la tabla en el orden de "nombre de columna ASC" suponiendo que no se especifica "ORDER BY" en mis consultas (es decir, "SELECT * FROM tablename WHERE ... LIMIT 10;")?

¿Hay algún caso de esquina que deba tener en cuenta?

Actualización n. ° 1: Muchas gracias a Quassnoi que señaló correctamente que INSERTAR y ELIMINAR estropea el orden. Esto me lleva a lo siguiente para preguntas adicionales:

  • ¿Qué ocurre con las ACTUALIZACIONES? Suponga que no se hacen INSERTs o DELETE en la tabla, sino solo actualizaciones: ¿el orden de clasificación estará intacto?
  • Supongamos que se realizan INSERT y DELETE, ¿cómo "reconstruyo" la ordenación de nuevo, por ejemplo una vez al día (en este caso específico la tabla solo cambia diariamente, por lo que reconstruirla diariamente después de los cambios debería seguir siendo correcta!) ¿La TABLA DE REPARACIÓN lo arregla, o debe agregar hacer ALTERAR TABLA ... ORDEN POR otra vez?

Respuesta

24

De documentation:

Tenga en cuenta que la tabla no se queda en este orden después de inserciones y eliminaciones

En realidad, si se emite SELECT ... ORDER BY a esta tabla, la opción de ALTER TABLE won te perdono de filesort, pero en cambio haz filesort mucho más rápido.

Ordenar un conjunto ya ordenado es equivalente a explorar este conjunto para asegurarse de que todo esté bien.

¿Qué hay de las ACTUALIZACIONES? Suponga que no se hacen INSERTs o DELETE en la tabla, sino solo actualizaciones: ¿el orden de clasificación estará intacto?

Si la tabla no contiene campos dinámicos (como VARCHAR o 'BLOB'), entonces lo más probable MyISAM se lo mueva cuando se actualiza.

No confiaría en este comportamiento, sin embargo, si estuviera construyendo una planta de energía nuclear o algo por lo que me pagaran.

Supóngase que las inserciones y eliminaciones se hacen - ¿cómo "reconstruir" la clasificación de nuevo, por ejemplo una vez al día (en este caso específico la tabla sólo cambia todos los días, por lo que la reconstrucción de todos los días después de que los cambios se hacen deberían todavía está bien!). ¿La TABLA DE REPARACIÓN lo arregla, o debe agregar hacer ALTERAR TABLA ... ORDEN POR otra vez?

Tendrá que hacer ALTER TABLE ... ORDER BY.

REPAIR solo corrige la estructura física de una tabla dañada.

+0

Muchas gracias por su rápida respuesta. He agregado dos preguntas de seguimiento que están relacionadas con tus respuestas. – knorv

+0

@Quassnoi lo hice ALTER TABLE ... ORDER BY y luego borré algunos registros, mi tabla no se concentró ...? ¿porqué es eso? – Basit

+0

@Basit: No sé – Quassnoi

-1

El ordenamiento por defecto de clasificación parece ser un intento de ser flojo que terminará por causarle muchos dolores de cabeza en el futuro. No lo tocaría en absoluto y solo me aseguraría de especificar Order By en mis consultas.

+12

¿Mi pregunta no estaba especificada de alguna manera? No veo cómo tu publicación podría ser una respuesta a la pregunta muy específica. – knorv

+2

no seas grosero, ¡solo quería ayudar! Hablando en general, ¿su sugerencia no es válida? – dennisbot

3

Ordenar físicamente una columna puede ahorrar cargas de IO. Es un método perfectamente legítimo utilizado en sistemas avanzados para acelerar el tiempo de consulta. Solo necesita reorganizar los datos de vez en cuando para que sus estancias se agrupen. El hecho de que algunas personas no hayan oído hablar de eso no significa que no exista. - Veterano de diseño avanzado de DB de 25 años.

Cuestiones relacionadas