簡體   English   中英

SQL Server非聚集索引

[英]SQL Server non-clustered index

我在SQL Server中有兩個不同的查詢,我想澄清一下

  1. 執行計划會有什么不同,以及
  2. 他們哪個更有效

查詢:

SELECT * 
FROM table_name  
WHERE column < 2

SELECT column 
FROM table_name 
WHERE column < 2

我在column上有一個非聚集索引。

我曾經使用過Postgresql,但對SQL Server和此類索引並不熟悉。

當我在這里閱讀許多問題時,我記下了兩個筆記:

  • 當我有一個非聚集索引時 ,我需要再執行一個步驟才能訪問數據

  • 使用非聚集索引,我可以擁有表的一部分的副本,而且響應時間更快。

所以,我很困惑。

還有一個問題是,當我使用“ SELECT *”時,這是非聚集索引的影響嗎?

第一個查詢

根據數據的大小,您可能會遇到諸如密鑰查找和RID查找之類的查找問題。

第二查詢

它將更快,因為它不會獲取不屬於索引的列,盡管我建議使用覆蓋索引..

我建議您檢查此博客文章

第一次選擇將使用非聚集索引來找到聚集鍵[存在聚集索引]或頁面和插槽[無聚集索引]。 然后將用於獲取行。 根據您的STATS(數據),查詢計划將有所不同。

第二個查詢被非聚集索引“覆蓋”。 這意味着非聚集索引包含您選擇的所有數據。 不需要聚簇鍵,也不需要聚簇索引和/或堆來向選擇列表提供數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM