Asp.net aspnet_用户表的排序顺序
我想知道Asp.net aspnet_用户表的排序顺序,asp.net,sql-server,asp.net-membership,Asp.net,Sql Server,Asp.net Membership,我想知道aspnet\u Users表是否总是按用户名排序,即使我添加的新用户按字母顺序排列在两个现有用户之间 我注意到方法Membership.GetAllUsers()似乎总是返回一个排序的MembershipUsers集合 另外,当我查看SQLServerManagementStudio并运行一个简单的SQL查询时,没有ORDERBY子句 SELECT [UserName] FROM [MyDb].[dbo].[aspnet_Users] …我总是得到一个排序的结果列表 我仍然不太熟
aspnet\u Users
表是否总是按用户名排序,即使我添加的新用户按字母顺序排列在两个现有用户之间
我注意到方法Membership.GetAllUsers()
似乎总是返回一个排序的MembershipUsers集合
另外,当我查看SQLServerManagementStudio并运行一个简单的SQL查询时,没有ORDERBY
子句
SELECT [UserName]
FROM [MyDb].[dbo].[aspnet_Users]
…我总是得到一个排序的结果列表
我仍然不太熟悉SQL Server,但我希望在向表中添加新行时,它(物理上)会附加到表的末尾。当我在没有ORDERBY的情况下运行select语句时,行将按照它们最初插入数据库的顺序被选择(因此没有任何特定的排序顺序)
我想我错了。但是它到底是如何工作的呢?aspnet_用户表是否有什么特别之处
我很高兴GetAllUsers()返回的MemberShipUserCollection已排序,但它总是有保证的吗
谢谢你的信息
更新
我刚刚注意到数据库包含一个名为aspnet\u Membership\u GetAllUsers
的存储过程。此过程实际上包含一个由UserName
生成的orderby
子句。因此,如果在代码中使用Membership.GetAllUsers()
时确实总是调用此存储过程(至少如果我使用的是SqlMembershipProvider),它解释了为什么Membership.GetAllUsers()
返回的集合按用户名排序
仍然存在一个问题:Membership.GetAllUsers()是否实际基于此存储过程?用户名上可能有聚集索引。这意味着表中的行是按用户名顺序存储的。SQL Server通常(但不总是)按其使用的索引顺序返回行
如果没有订购方,则无法保证。因此,如果您依赖于排序的结果,请不要忘记排序依据(:)用户名上可能有一个聚集索引。这意味着表中的行是按用户名顺序存储的。SQL Server通常(但不总是)按其使用的索引顺序返回行
如果没有订购方,则无法保证。因此,如果您依赖于排序的结果,请不要忘记
order by
:)如果SQL中没有明确指定order by
子句,任何顺序都是偶然的,绝对不能以任何方式、形状或形式保证。不要依赖它
如果需要特定的顺序,请使用
orderby
来定义该顺序。如果SQL中没有明确指定orderby
子句,则任何顺序都是偶然的,并且绝对不能以任何方式、形状或形式保证。不要依赖它
如果您需要特定的订单,请使用orderby来定义该订单。用户名和应用程序ID上有一个聚集索引。由于您通常只使用1个applicationID,因此它将按用户名排序。表中的数据按其聚集索引排序。这意味着您通常会看到按聚集列的顺序返回的未排序日期。然而,这永远无法保证。因此,如果希望结果按特定顺序返回,则必须使用ORDER BY。每当您将数据插入到具有聚集索引的表中时,它都会将数据插入到物理上属于的表中。查看分页和集群与非集群。它将帮助您了解SQL Server如何存储数据。请参阅此处以了解概述。用户名和应用程序ID上有一个聚集索引。由于您通常只使用1个applicationID,因此它将按用户名排序。表中的数据按其聚集索引排序。这意味着您通常会看到按聚集列的顺序返回的未排序日期。然而,这永远无法保证。因此,如果希望结果按特定顺序返回,则必须使用ORDER BY。每当您将数据插入到具有聚集索引的表中时,它都会将数据插入到物理上属于的表中。查看分页和集群与非集群。它将帮助您了解SQL Server如何存储数据。请看这篇文章以获得概述