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

aspnet_users表的排序顺序

  •  1
  • Slauma  · 技术社区  · 14 年前

    我想知道 aspnet_Users 即使我添加了两个已经存在的用户之间按字母顺序排列的新用户,表也总是按用户名排序。

    我注意到这种方法 Membership.GetAllUsers() 似乎总是会返回一个 排序的 成员身份用户的集合。

    另外,当我查看sqlservermanagementstudio并运行一个简单的sql查询时 ORDERBY 条款。。。

    SELECT [UserName]
      FROM [MyDb].[dbo].[aspnet_Users]
    

    …我总是 排序的 结果列表。

    我对sql server还很不熟悉,但我希望在向表中添加新行时,它会(物理上)附加到表的末尾。当我在没有orderby的情况下运行select语句时,行将按照最初插入数据库的顺序被选中(因此没有任何特定的排序顺序)。

    我想我错了。但它到底是如何工作的呢?aspnet_用户表可能有什么特别之处吗?

    我很高兴getAllusers()返回的membershipUserCollection被排序,但它总是有保证的吗?

    谢谢你的消息!

    更新

    我刚刚注意到数据库包含一个名为 aspnet_Membership_GetAllUsers . 此过程实际上包含 ORDER BY 条款由 UserName . 所以如果在我使用 成员身份。GetAllUsers() 在我的代码中(至少如果我使用的是sqlmembershipprovider),它解释了 成员身份。GetAllUsers() 按用户名排序。

    问题仍然是: 成员身份。GetAllUsers() 实际上是基于这个存储过程?

    3 回复  |  直到 14 年前
        1
  •  2
  •   Ben Hoffman    14 年前

    用户名和applicationid上有一个聚集索引。因为您通常只使用一个applicationid,所以它看起来是按用户名排序的。表中的数据按其聚集索引排序。这意味着您通常会看到未排序的日期按聚集列的顺序返回。然而,这是永远无法保证的。因此,如果希望结果按特定顺序返回,则必须使用order by。无论何时将数据插入到具有聚集索引的表中,它都会将数据插入到物理上属于该表的任何位置。研究分页和集群与非集群。它将帮助您了解sql server如何存储数据。看看这个 http://en.wikipedia.org/wiki/Clustered_index#Architecture 一个概述。

        2
  •  3
  •   Andomar    14 年前

    用户名上可能有聚集索引。这意味着表中的行按用户名顺序存储。SQL Server通常(但并不总是)按其使用的索引的顺序返回行。

    没有 order by ,没有保证。所以,如果你依赖命令的结果,不要忘记 按顺序 :)

        3
  •  2
  •   marc_s Hady Salah    14 年前

    没有 明确地 指定 ORDER BY 子句在您的SQL中,任何顺序都是偶然的,并且绝对不能以任何方式、形状或形式保证。不要依赖它。

    如果您需要特定的订单,请使用 按顺序 来定义这个顺序。