sql >> Base de Datos >  >> RDS >> Sqlserver

Clasificación de clave principal

Los datos se almacenan físicamente mediante un índice agrupado, que suele ser la clave principal, pero no tiene por qué serlo.

No se garantiza que los datos en SQL tengan un orden sin una cláusula ORDER BY. Siempre debe especificar una cláusula ORDER BY cuando necesite que los datos estén en un orden particular. Si la tabla ya está ordenada de esa manera, el optimizador no hará ningún trabajo adicional, por lo que no hay problema en tenerlo allí.

Sin una cláusula ORDER BY, el RDBMS podría devolver páginas almacenadas en caché que coincidan con su consulta mientras espera que se lean los registros del disco. En ese caso, incluso si hay un índice en la tabla, es posible que los datos no entren en el orden del índice. (Tenga en cuenta que esto es solo un ejemplo:no sé ni creo que un RDBMS del mundo real haga esto, pero es un comportamiento aceptable para una implementación de SQL).

EDITAR

Si tiene un impacto en el rendimiento al ordenar versus cuando no ordena, probablemente esté ordenando en una columna (o conjunto de columnas) que no tiene un índice (agrupado o de otro tipo). Dado que es una serie temporal, es posible que esté ordenando según el tiempo, pero el índice agrupado está en el bigint principal. SQL Server no sabe que ambos aumentan de la misma manera, por lo que tiene que recurrir a todo.

Si la columna de tiempo y la columna de clave principal están relacionadas por orden (una aumenta si y solo si la otra aumenta o permanece igual), ordene por clave principal. Si no están relacionados de esta manera, mueva el índice agrupado de la clave principal a cualquier columna por la que esté ordenando.