在没有ORDER BY的情况下以聚簇索引顺序选择数据

时间:2010-06-07 21:31:22

标签: sql-server sql-server-2008

我知道没有ORDER BY子句就没有保证,但有没有任何技术可以调整SQL Server表,因此他们更可能以聚簇索引顺序返回行,而不必指定ORDER BY每次我想运行一个超快速的即席查询?例如,是否会重建我的聚簇索引或更新统计信息帮助?

在我们使用的所有表中,我只注意到有两个人以不可预测的顺序给我结果。这真的只是一个烦恼,但能够最小化它会很好。如果由于页面边界问题或类似问题这是相关的,我应该提到其中一个表具有不一致的排序,是我们拥有的在标识列上有聚簇索引的最长表。

编辑:删除了具体的示例,因为我认为这个例子使得这个读取更像是“帮我解决这个问题”的问题,当时我只是想用这个例子来说明抽象问题

1 个答案:

答案 0 :(得分:4)

如果您希望以特定方式订购结果集,请使用ORDER BY 如果您希望使用特定索引访问查询,可能想要使用INDEX table hint,但强烈建议不要这样做。

在您的特定示例中,访问由IDENTITY聚类的非常大的accesslog表以查询特定UserId的所有行是您想要的 last 。您希望UserId拥有索引,并且您希望查询使用该索引。作为旁注,由IDENTITY聚集的访问日志表通常不是一个好的选择,因为典型的访问是按时间范围(t1和t2之间的访问)或其他属性(通过userId,如在您的示例中,或通过machineId)或类似的)。 IDENTITY列上的聚簇索引不会满足这些要求。