簡體   English   中英

查詢未執行索引查找或掃描

[英]Query not doing index seek or scan

我是Index的新手。 我有下面的表格[FORUM1]

    [msg_id] [int] IDENTITY(1,1) NOT NULL,
    [cat_id] [int] NULL,
    [msg_title] [nvarchar](255) NULL

並創建了非聚集索引

CREATE NONCLUSTERED INDEX catindex ON forum1(cat_id)

現在,當我運行此簡單查詢時,我可以看到未使用索引

SELECT msg_title FROM forum1 where cat_id=4

僅當我創建CI並包含MSG_TITLE fld時才調用索引。 但是問題是我必須在實際表上運行更多類似的查詢,例如date = something,userid = 20,status = 1。 因此,在每個索引中都包含列對我不利。

執行計划屏幕截圖

msg_title不包含在索引中->在非聚簇索引中找到的任何值都需要在實際數據頁中進行鍵查找 ,這是一項昂貴的操作 -因此,最有可能的是,表掃描更快。 另外:“表掃描”表明您有一個堆-一個沒有聚簇索引的表-開始時(在大多數情況下)這很不好。 為什么沒有聚簇索引?

您可以通過在索引中包含 msg_title來解決此問題:

CREATE NONCLUSTERED INDEX catindex 
ON forum1(cat_id) INCLUDE(msg_title)

現在,我非常確定,SQL Server將使用該索引(因為它可以在索引結構中找到查詢所需的所有數據-據說該索引是覆蓋索引 )。 這樣做的好處是:額外的列僅包含在索引的葉級別中,因此它僅使索引最小。 但是,它可能導致索引被更頻繁地使用。 非常值得!

暫無
暫無

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

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