在SQL-SERVER自带的PUBS数据库中:use pubs
select * from titles
go
select title_id,title from titles
go执行上述两条查询,得到的记录行数相同,但是其结果集中行的顺序却不相同(title_id为主键)
------------------------------第一条结果-----------------------------
BU1032 The Busy Executive's Database Guide ...
BU1111 Cooking with Computers: Surreptitious Balance Sheets ...
BU2075 You Can Combat Computer Stress! ...
BU7832 Straight Talk About Computers ...
MC2222 Silicon Valley Gastronomic Treats ...
MC3021 The Gourmet Microwave ...
... ... ...
------------------------------第2条结果-----------------------------
PC1035 But Is It User Friendly?
PS1372 Computer Phobic AND Non-Phobic Individuals: Behavior Variations
BU1111 Cooking with Computers: Surreptitious Balance Sheets
PS7777 Emotional Security: A New Algorithm
TC4203 Fifty Years in Buckingham Palace Kitchens
PS2091 Is Anger the Enemy?
PS2106 Life Without Fear
PC9999 Net Etiquette
... ...以上是什么回事啊?其中select * from titles 所得结果集的行顺序与原表titles中的顺序相同!

解决方案 »

  1.   

    看一下查询计划,select *  from titles 是扫描的聚集索引
    select title_id,title from titles 是扫描的非聚集索引
    ------
    至于为什么查询计划会这样,不清楚,等高手
      

  2.   

    title_id为主键,该列上建有聚集索引,它决定了记录的存储顺序!
    当该表上不存在其它索引的时候,用select *  from titles 
    显示的结果即为表中记录的先后顺序显示!如果该表其它列上还建有索引,则查询结果的显示顺序取决于引用的索引
      

  3.   

    select title_id,title from titles 这一句
    那个字段使用了聚集索引? 即既便使用了聚集索引,怎么会使数据排列成这样?既不是按字母顺序排列,也不是按数值顺序排列,结果集中的排序原理是怎样的了?select title_id,title from titles  还是这一句!
    此句未指定order by...但很明显,得到的结果集是按照title字段排序的
      

  4.   

    title_id为主键,该列上建有聚集索引(升序)title 列上有非聚集索引(升序)
    ---------
    很明显显示顺序就是跟这个有关。