用 select * from 表 这样的语句查询表,默认的记录顺序应该由什么来决定呢?
如果主键为聚集索引,是以主键为顺序的,如果不设聚集索引呢?
另外记录修改后顺序会不会变?我记得sql2000记录存储是没有物理顺序的我有一个表,没有设聚集索引,添加后记录能按添加先后顺序排列,但是如果有记录修改后顺序会变化,如何解决?一定要添加个记录先后的索引列吗?

解决方案 »

  1.   

    create table #t(a int,b nvarchar(10))insert into #t(a,b)
    select 1,'a' union all
    select 2,'b' union all
    select 3,'c' union all
    select 4,'d'select * from #t
    /*此时查询的结果是添加进去的自然顺序*/update #t set b = 'b1' where a = 2
    update #t set a = 5 where a = 2
    /*以上两个update操作都未能改变查询结果的顺序*/create nonclustered index ix_tempt_a on #t (a asc)
    /*创建非聚集索引后未能改变查询结果顺序*/-----------------------------------------------------------------------
    所以我也很奇怪,lz做了update后,数据顺序会改变,会是什么原因。。
    update 应该是在原来的地址上,删除数据,然后插入修改后的数据,逻辑地址顺序应该不会变吧。
      

  2.   

    你问了这么多,不如加个索引,查询时按照索引字段排序即可.
    在生产实践中:select * from 表 ,这样的语句几乎没有用处.
      

  3.   

    事情是这样滴:
    1.有大量编号数据要录入SQL2000表,刚开始随便为这个编号用了主键聚集索引(设主键时默认的),结果录入过程中如果重新打开表,录入的顺序会按主键排序,而不是录入的顺序了。2.于是我稍稍修改了一下程序,添加了个时间字段来记录录入时间。基本合乎要求了。3.我想试试去掉主键的聚集索引会如何,结果有时是可以的,但数据更新会变化,这种变化我并没有看出根据是什么,但肯定有变化有关,因为分段会按变化的数据来分。4.其实加个自增字段设为主键聚集索引就OK了,根本不用改程序的。我白费了功。