Sql-Server

使用聚集索引返回值

  • November 13, 2016

我有 emp 表(empno、ename、job、mgr、hire_date、sal、deptno),根本沒有索引。如果我跑

select * from emp 

我得到了 empno 排序的行。現在我創建一個這樣的聚集索引:

Create clustered index name on emp(ename)

如果我再次執行 select *,這些行現在按 ename 排序。現在,如果我刪除索引。

drop index name on emp

我希望看到 empno 重新排序的行,就像在創建索引之前一樣。相反,我仍然看到按 ename 排序的行,就好像索引仍然存在一樣。有沒有辦法像以前一樣查看 empno 重新排序的行,而不使用“order by empno?”。我嘗試註銷並再次連接以進行刷新,但沒有成功。唯一的方法是刪除並重新創建表。也許表定義中有一個參數在創建索引時更改,而在刪除索引時沒有更新?

在我看來,在索引之前顯示數據的預設方法,在刪除索引時不會保留/恢復

當您創建聚集索引時ename,表中的行被打亂為該順序。當您刪除索引時,行沒有重新洗牌。

不能保證查詢會按照它們儲存的順序返回行,但通常情況就是這樣。

如果順序很重要,那麼您將添加一個ORDER BY(並且最好也將表聚集在該欄位上以避免每次都進行排序)。

但是不要僅僅因為這個而選擇集群鍵。有關集群和堆的更全面討論,請參見http://kejser.org/clustered-indexes-vs-heaps/

引用自:https://dba.stackexchange.com/questions/155106