没有指定order by 排序,同一条SQL(查询条件的值不同,也就是说不是同一天的数据),为什么查出来的数据顺序不同啊

CreatBird 2009-10-23 12:56:39
问题,如题目所示

环境:winXP SP3,数据库服务器是MSDE,数据库客户端microsoft SQL Server Manegement Studio2005
这些,都在我的机器上,只有我用我的机器,没有其他人连接我的数据库。
(我的环境都是日文环境,下面的叙述可能多少和中文环境有些语言上的出入,不理解的请问我)

SQL文如下:
SELECT DISTINCT
dbo.POSTotalSectionSales.ShopCode, dbo.POSTotalSectionSales.SalesDate, dbo.POSSectionMaster.SectionCode,
dbo.POSSectionMaster.Name, SUBSTRING(dbo.POSSectionMaster.SectionCode, 1, 1) AS Type
FROM dbo.POSSectionMaster CROSS JOIN
dbo.POSTotalSectionSales
where dbo.POSTotalSectionSales.SalesDate = '2009/10/12'

dbo.POSSectionMaster表里只有SectionCode和Name,共21G条数据,就是各个部门的名称,主KEY是SectionCode。
dbo.POSTotalSectionSales表里,有ShopCode,SalesDate,SalesHour,SectionCode,Name,Type,Count,Amount,
主KEY是(ShopCode,SalesDate,SalesHour,SectionCode,),表中有很多天的数据,
但是POSTotalSectionSales.ShopCode字段可以无视,因为这个字段的内容都是同一个商店CODE。

现在分别执行两次这个SQL文,
第一次,设定查询条件SalesDate = '2009/10/12'
第二次,设定查询条件SalesDate = '2009/10/13'

现象:第一次的查询结果,是乱序的,第二次的查询结果,是按照SectionCode排好序的,
看了看执行计划,这两次查询,不同的地方是,第一次有个Hash Match(aggregate),第二次有个Sort(Distinct Sort)
(其他的日期也反复的查询了几次,和第二次一个样,按照SectionCode排序的,执行计划里面也有个Sort或者Sort(Distinct Sort))
问题:
为什么同一条查询语句,只有查询的条件值不同,出的结果的排序会不同呢

...全文
823 50 打赏 收藏 转发到动态 举报
写回复
用AI写文章
50 条回复
切换为时间正序
请发表友善的回复…
发表回复
CreatBird 2009-10-30
  • 打赏
  • 举报
回复
这个系统运行了3年多了,在没写order by 的前提下
还没有听说出现乱序的问题。每天都要打印一次帐票,一般是正常排序,怎么突然有一天打印的时候,成了乱序了?天长日久,以前的数据就不是正常排序了,现在就是要弄清楚是什么改变了以前数据的存储顺序
CreatBird 2009-10-30
  • 打赏
  • 举报
回复
[Quote=引用 45 楼 cpzyy828 的回复:]
春哥纯爷们,铁血真汉子
[/Quote]

谢谢哥们帮我顶帖子。你是我朋友吗?
CreatBird 2009-10-30
  • 打赏
  • 举报
回复
[Quote=引用 44 楼 colacat911 的回复:]
数据是集合,没有顺序,要排序指定order by
[/Quote]
这个道理我也明白。
但是,目前的情况是,这个系统运行了3年多了,在没写order by 的前提下
还没有听说出现乱序的问题。现在就是要弄清楚,为什么!!!
CreatBird 2009-10-30
  • 打赏
  • 举报
回复
[Quote=引用 49 楼 pbsh 的回复:]
引用 48 楼 creatbird 的回复:
这个系统运行了3年多了,在没写order by 的前提下
还没有听说出现乱序的问题。每天都要打印一次帐票,一般是正常排序,怎么突然有一天打印的时候,成了乱序了?天长日久,以前的数据就不是正常排序了,现在就是要弄清楚是什么改变了以前数据的存储顺序


可能是磁盘空间问题和聚集索引导致部分历史数据在某些时候发生物理转移了吧?
[/Quote]
我也怀疑,能不能给点链接什么的
pbsh 2009-10-30
  • 打赏
  • 举报
回复
[Quote=引用 48 楼 creatbird 的回复:]
这个系统运行了3年多了,在没写order by 的前提下
还没有听说出现乱序的问题。每天都要打印一次帐票,一般是正常排序,怎么突然有一天打印的时候,成了乱序了?天长日久,以前的数据就不是正常排序了,现在就是要弄清楚是什么改变了以前数据的存储顺序
[/Quote]

可能是磁盘空间问题和聚集索引导致部分历史数据在某些时候发生物理转移了吧?
CreatBird 2009-10-29
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 zywcy100 的回复:]
引用 1 楼 fredrickhu 的回复:
那天才讨论了这个问题

没有order by排序的时候 是按照本身的物理逻辑来进行排序的

赞成小F的
[/Quote]

那你告诉我,怎么才能看到每一条数据的物理位置吧
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fredrickhu 的回复:]
那天才讨论了这个问题

没有order by排序的时候 是按照本身的物理逻辑来进行排序的
[/Quote]
赞成小F的
忆轩辕 2009-10-29
  • 打赏
  • 举报
回复
数据是集合,没有顺序,要排序指定order by
CreatBird 2009-10-29
  • 打赏
  • 举报
回复
等待大家帮忙给我解释一下,我都睡不着觉了阿

怎么才能看到每一条数据的物理位置啊
有没有这样的SQL啊
feol 2009-10-28
  • 打赏
  • 举报
回复
不太清楚,期待高手来解答,我理解的是,存贮过程也不是物理空间连续的,所以不加order by 肯定是乱的。
wqm_fd 2009-10-28
  • 打赏
  • 举报
回复
不做db好多年。纯粹友情顶下
CreatBird 2009-10-27
  • 打赏
  • 举报
回复
等待那哥们儿帮忙解释一下,或者告诉我原因,即以后怎么才能避免产生这样的问题。
当然,除了添加 order by语句这个办法。
taoistong 2009-10-26
  • 打赏
  • 举报
回复
看表的物理结构

dbcc page ('taoisTong', 1, 115, 3) WITH TABLERESULTS

http://blog.csdn.net/taoistong/archive/2009/04/17/4088418.aspx
Garnett_KG 2009-10-26
  • 打赏
  • 举报
回复
你给的命令是 "消除重复"

SQL Server即可以使用Aggregate的方法消除重复,也可以使用Sort後再消除重复.

请问这个有什么不妥的?
CreatBird 2009-10-26
  • 打赏
  • 举报
回复
to ALL
好像有个RID,可以表示哪一行。不过还不会使用呢

是不是按照 Page:RID这样的形式表示每一条的数据物理位置的啊

继续调查中,请大家帮忙。
CreatBird 2009-10-26
  • 打赏
  • 举报
回复
to yesyesyes,navy887
如何才能看到,某一条数据所在的页数。
比如,写一个SQL,可以看到每一条数据所在的页数。我要确认一下。
navy887 2009-10-26
  • 打赏
  • 举报
回复
数据的基本存储单位是页,当没有order by 排序的时候,是按照物理页的顺序来读取的。
yesyesyes 2009-10-26
  • 打赏
  • 举报
回复
应该和数据页有关
xiequan2 2009-10-26
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 creatbird 的回复:]
to xiequan2
> 没有order by 的查询,结果从理论上讲顺序是不一定的,
> 他会按物理上最先访问的到的顺序排,你看的乱序也是正常的
  有没有办法看一下某一条数据的物理位置。
  oracle里面不是有个rowID吗?SQLServer里面有没有类似的属性之类的啊
[/Quote] ,有个类似的row_number,但它的值也是要依靠排序的
SQL77 2009-10-26
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 creatbird 的回复:]
to xiequan2
> 没有order by 的查询,结果从理论上讲顺序是不一定的,
> 他会按物理上最先访问的到的顺序排,你看的乱序也是正常的
  有没有办法看一下某一条数据的物理位置。
  oracle里面不是有个rowID吗?SQLServer里面有没有类似的属性之类的啊
[/Quote]
不知道 是不是IDENTITY
加载更多回复(29)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧