解决方法
数据通过聚集索引进行物理存储,聚簇索引通常是主键,但不一定是.
如果没有ORDER BY子句,则不保证sql中的数据具有顺序.当您需要按特定顺序排列数据时,应始终指定ORDER BY子句.如果表已经按这种方式排序,优化器将不会做任何额外的工作,因此将它放在那里是没有害处的.
如果没有ORDER BY子句,RDBMS可能会在等待从磁盘读入记录时返回与您的查询匹配的缓存页面.在这种情况下,即使表上有索引,数据也可能不会以索引的顺序进入. (注意这只是一个例子 – 我不知道甚至认为现实世界的RDBMS会这样做,但它是sql实现的可接受行为.)
编辑
如果在排序时与不排序时有性能影响,则可能会对没有索引(聚簇或其他)的列(或列集)进行排序.鉴于它是一个时间序列,您可能会根据时间进行排序,但聚集索引位于主要bigint上. sql Server不知道两者都以相同的方式增加,所以它必须采取一切措施.
如果时间列和主键列是按顺序相关的(当且仅当另一个增加或保持不变时,才会增加),而是按主键排序.如果它们不以这种方式相关,则将聚簇索引从主键移动到您要排序的任何列.