我正在尝试对数据库表进行排序,并将排序后的行插入到另一个表中。但是,当我查询新表时,它仍然有未排序的数据。
Create table #unsorted (ID int, dt date)
Insert into #unsorted values(1, '2019-01-01')
Insert into #unsorted values(2, '2018-12-15')
Insert into #unsorted values(3, '2017-01-01')
select * from #unsorted -- unsorted data as expected
Create table #sorted (ID int, dt date)
insert into #sorted
select ID, dt from #unsorted Order by dt asc
select * from #sorted -- It should be sorted by date but it is not.
排序表的预期结果:
3 2017-01-01
2 2018-12-15
1 2019-01-01
排序表的实际结果:
1 2019-01-01
2 2018-12-15
3 2017-01-01
当插入到另一个表中时,如何对表中的数据进行物理排序?
1条答案
按热度按时间k4aesqcs1#
不能-数据库在存储表数据时会按自己喜欢的方式对其排序(通常表有一个聚集键,存储顺序基于构成键的列的值)。如果没有集群键,则存储顺序是不可预测的),即使这样,存储顺序也可能与输出顺序无关,这取决于查询在其管道中执行的操作
查询时对数据进行排序
根据您计划如何使用表的数据来选择合适的集群键本身就是一门艺术,您的dba将非常仔细地考虑这一点,对那些只插入guid主键而让sql server遭受损失的开发人员绞尽脑汁:)