代码之家  ›  专栏  ›  技术社区  ›  ddimitrov

按聚集索引顺序选择数据而不按顺序

  •  2
  • ddimitrov  · 技术社区  · 16 年前

    我知道没有ORDERBY子句是不能保证的,但是是否有任何技术可以调整SQL Server表,以便 更有可能 要以聚集索引顺序返回行,而不必每次运行超级快速即席查询时都指定ORDER BY?例如,重建聚集索引或更新统计信息是否有帮助?

    在我们使用的所有表中,我只注意到有两个表以不可预知的顺序给了我结果。这真的只是一个烦恼,但最好能把它最小化。如果这与页面边界问题或类似问题有关,那么我应该提到,顺序不一致的表之一是我们拥有的在标识列上具有聚集索引的最长的表。

    编辑 :删除了特定的示例,因为我认为当我只想使用示例来说明抽象问题时,该示例使此问题更像是“帮助我处理此查询”问题。

    1 回复  |  直到 16 年前
        1
  •  4
  •   Remus Rusanu    16 年前

    如果要以特定方式对结果集进行排序,请使用 ORDER BY .
    如果希望使用特定索引访问查询,则 可以 想使用 INDEX table hint 但他们强烈反对。

    在您的特定示例中,访问由标识集群的非常大的accesslog表以查询特定用户ID的所有行是 最后的 你想要的东西。您希望按userid建立索引,并且希望查询使用该索引。另一方面,由标识聚集的访问日志表通常不是一个好的选择,因为典型的访问是按时间范围(在T1和T2之间的访问)或其他属性(按用户ID(如您的示例中所示),或按machineid或类似属性)进行的。这些都不满足于标识列上的聚集索引。

    推荐文章