簡體   English   中英

MS SQL Server 2005上的索引varchar

[英]Index varchar on MS SQL Server 2005

我需要在MS SQL Server 2005中索引我的表上的varchar字段,但我不清楚如何這樣做。 如果我嘗試在字段上添加非聚集索引,則表示“mytable”表中的“列'xxxx'的類型無效,無法用作索引中的鍵列”

我的表有一個自動增加的int ID,它被設置為表中的主鍵。 如果我將此屬性設置為索引,然后將我的varchar列添加為“包含列”,則索引將完成。 但我不確定這是我想要的 - 我希望能夠僅基於varchar字段搜索表,而我對索引的理解是必須提供所有索引元素才能真正看到查詢中的加速,但我不想要包含int ID(因為我不知道它是什么,在給定的查詢時)。

我試圖做錯了嗎? ID +我的varchar作為一個包含的列能完成我想要的嗎?

你的varchar(max) 我認為不允許在索引中使用它們。

否則,發布您的CREATE TABLE語句,通常將varchar添加到索引沒有問題。

我假設你的是一個VARCHAR(MAX)列,正如錯誤所說,它是索引的invalida數據類型。 建議:創建一個計算列,該列是VARCHAR(MAX)列的哈希值(例如,使用HashBytes函數),然后僅在計算列上創建索引。 然后,在SQL DML的搜索條件(例如WHERE子句)中,您將同時使用VARCHAR(MAX)搜索值本身以及表中各列上的VARCHAR(MAX)搜索值的哈希值。 將搜索值的散列封裝在“幫助程序”存儲過程中可能是個好主意。

不,ID + varchar列不起作用。 這對於在ID上進行查找並且只選擇ID或/和varchar列的查詢非常有用 - 然后您將擁有覆蓋索引,並且只能通過查看索引來檢索所有內容。

我猜你的ID列上有一個聚簇索引,因為它是主鍵。 然后,您需要在varchar列上創建一個非聚集索引 - 這應該是可能的。 非聚集索引也將自動包含ID。

還要記住,索引只適用於WHERE VarcharColumn ='xyz'和WHERE VarcharColumn LIKE'xyz%'等查詢。

這對LIKE'%xyz%'和'%xyz'查詢沒有幫助。

將列設置為默認的主鍵會創建聚簇索引,因此您不必創建另一個INT + VARCHAR索引。

您正在尋找的是單獨的VARCHAR上的索引 - 沒有+ INT,因為您的主鍵是隱式包含的 - 所有SQL Server應該能夠在執行索引查找時找到實際的行。 雖然有一個限制,我相信索引列的總體大小應該<900字節(至少是SQL Server 2000)。 你的VARCHAR有多長?

您無需在主鍵中包含varchar字段即可將其編入索引。 要創建索引,只需在Management Studio中修改表,單擊Manage Indexes and Keys按鈕,然后單擊Add以添加新索引。 然后選擇VARCHAR字段。 應該沒問題。

暫無
暫無

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

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