En el servidor Sql, tengo una tabla con una clave principal de identidad. A menudo quiero los últimos nuevos registros, así que tomo el Top n ordenado al descender la clave principal. ¿Debo definir el índice de clave principal como descendente, o no hace ninguna diferencia? es decir, si están en orden ascendente, ¿puede sql igualmente funcionar de manera eficiente al revés?Clave principal ascendente vs descendente
Respuesta
Desde un punto de vista puramente consulta, no hace ninguna diferencia si su clave es descendente o ascendente si quieres tirar de N más reciente o N registros más antiguos:
los algoritmos internos de SQL Server puede navegar por igual de manera eficiente en ambas direcciones en un índice de una sola columna, independientemente de la secuencia en que se almacenan las claves. Por ejemplo, especificar DESC en un índice de una sola columna no hace que las consultas con una cláusula ORDER BY IndexKeyCol DESC se ejecuten más rápidamente que si se especificara ASC para el índice.
http://msdn.microsoft.com/en-us/library/aa933132(SQL.80).aspx
Sin embargo bajo casi cualquier circunstancia normal, de su clave primaria a ser ascendente y ordinalmente secuencial para evitar la fragmentación. SQL Server está optimizado para agregar nuevos registros físicamente al final del archivo de base de datos. Si necesita insertar cada nuevo registro en la parte superior y empujar todo hacia abajo, probablemente dé como resultado una fragmentación de casi el 100%.
No hace absolutamente ninguna diferencia.
Ni siquiera puedo imaginar por qué es posible declararlo de cualquier manera.
Con un índice de una sola columna, no importa, pero ASC y DESC entran en juego cuando tiene varias columnas en el índice, y el orden es importante para la segunda/tercera/cuarta/columna etc. –
Esto no tiene sentido para mí. Si tiene dos valores de campo, la forma en que desciende del árbol es completamente indiferente. ¿Es solo una suposición, o tienes una referencia? – dkretz
tiene sentido para mí. Si tiene un índice declarado 'A ASC, B DESC' pero la mayoría de sus consultas son' ORDER BY A ASC, B ASC' que no evitará una clasificación. –
- 1. Programación descendente y ascendente
- 2. Vista ascendente/descendente de animaciones de Android adecuada
- 3. conjunto de consultas django order_by, ascendente y descendente
- 4. Índices de SQL Server: ascendente o descendente, ¿qué diferencia hace?
- 5. Tipo de clave principal: int vs long
- 6. Clave principal SQL: entero vs varchar
- 7. NSArray en orden descendente
- 8. C# list.Orderby descendente
- 9. Java Array Orden descendente?
- 10. F # Seq.sortPor orden descendente
- 11. ascendente/descendente en LINQ - ¿se puede cambiar el orden por parámetro?
- 12. Android: Clave principal GUID
- 13. Cambio de clave principal
- 14. Tablas sin clave principal
- 15. Clasificación de clave principal
- 16. Hibernar sin clave principal
- 17. cakephp pagination tipo descendente primero
- 18. Ordenando matrices PHP numéricamente por valor clave descendente
- 19. Cambiar clave principal a clave compuesta (la clave principal ya existe)
- 20. Dos formas de diseñar un sistema complejo: descendente vs inferior
- 21. LINQ Orden por consulta descendente
- 22. ¿Crear vista con clave principal?
- 23. ¿Cómo elegir mi clave principal?
- 24. MySQL clave principal de multicolumna
- 25. RestKit atributo de clave principal
- 26. Eliminar duplicados sin clave principal
- 27. ¿Clave principal compuesta o no?
- 28. Clasificación int matriz en orden descendente
- 29. Ordenar con dos criterios, cadena ascendente, int ascendente
- 30. MySQL - Usar clave externa como clave principal también
No deberías ** no ** crearlo como 'desc'. Obtendrá mucha fragmentación lógica de las inserciones [como se muestra aquí] (http://stackoverflow.com/a/9382500/73226) –