Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Classificação de chave primária


Os dados são armazenados fisicamente pelo índice clusterizado, que geralmente é a chave primária, mas não precisa ser.

Não é garantido que os dados em SQL tenham ordem sem uma cláusula ORDER BY. Você deve sempre especificar uma cláusula ORDER BY quando precisar que os dados estejam em uma ordem específica. Se a tabela já estiver classificada dessa maneira, o otimizador não fará nenhum trabalho extra, então não há mal nenhum em tê-la lá.

Sem uma cláusula ORDER BY, o RDBMS pode retornar páginas em cache que correspondam à sua consulta enquanto aguarda a leitura dos registros do disco. Nesse caso, mesmo que haja um índice na tabela, os dados podem não entrar na ordem do índice. (Observe que este é apenas um exemplo - não sei ou até acho que um RDBMS do mundo real fará isso, mas é um comportamento aceitável para uma implementação SQL.)

EDITAR

Se você tiver um impacto no desempenho ao classificar versus quando não estiver classificando, provavelmente está classificando em uma coluna (ou conjunto de colunas) que não possui um índice (agrupado ou não). Dado que é uma série temporal, você pode estar classificando com base no tempo, mas o índice clusterizado está no bigint primário. O SQL Server não sabe que ambos aumentam da mesma forma, então tem que recorrer a tudo.

Se a coluna de tempo e a coluna de chave primária estiverem relacionadas por ordem (uma aumenta se e somente se a outra aumentar ou permanecer a mesma), classifique pela chave primária. Se eles não estiverem relacionados dessa maneira, mova o índice clusterizado da chave primária para as colunas pelas quais você está classificando.