en honor a la orden por parte del motor tiene dos alternativas:
- escanear las filas utilizando un índice que ofrece el orden solicitado
- ordenar las filas
primera opción es rápido, segundo es lento. El problema es que para ser utilizado, el índice tiene que ser un que cubra el índice. Lo que significa que contiene todas las columnas en la lista de proyección SELECT y todas las columnas utilizadas en las cláusulas WHERE (como mínimo). Si el índice no está cubriendo, el motor debería buscar el índice agrupado (es decir, la "tabla") para cada fila, a fin de recuperar los valores de las columnas necesarias. Esta búsqueda constante de valores es costosa, y hay un punto de inflexión en el que el motor (con razón) decidirá que es más eficiente escanear el índice agrupado y ordenar el resultado, ignorando de hecho su índice no agrupado. Para más detalles, vea The Tipping Point Query Answers.
en cuenta las tres preguntas siguientes:
SELECT dateColumn FROM table ORDER BY dateColumn
SELECT * FROM table ORDER BY dateColumn
SELECT someColumn FROM table ORDER BY dateColumn
La primera de ellas se utilizará un índice no agrupado en dateColumn. Pero el segundo no usará un índice en dateColumn, probablemente elija un escaneo y clasifique en su lugar filas de 1M. Por otro lado, la tercera consulta se puede beneficiar de un índice en Table(dateColumn) INCLUDE (someColumn)
.
Este tema se cubre en su totalidad en MSDN, vea Index Design Basics, General Index Design Guidelines, Nonclustered Index Design Guidelines o How To: Optimize SQL Indexes.
En última instancia, la elección más importante de su diseño de tabla es el índice agrupado que utiliza. Casi siempre la clave principal (por lo general, una ID autoincrementada) se deja como índice agrupado, una decisión que beneficia solo ciertas cargas OLTP.
Y, por último, una pregunta bastante obvia: ¿Por qué en el mundo pediría 1 millón de filas? No puedes mostrarlos, ¿verdad? Explicar un poco más acerca de su caso de uso podría ayudarnos a encontrar una mejor respuesta para usted.
¿Qué 'RDBMS' estás usando? – Quassnoi
Estoy usando SQL Server 2008 – silent
¿Es esa columna de fecha y hora en un índice separado propio? Usted dice "agregado ... al índice" ....si la columna de fecha y hora es, p. columna no. 3 en un índice compuesto, eso no ayudará en absoluto al tratar de ordenar solo por esa columna de fecha y hora ........ –