2014-02-07 47 views
10

保持nvarchar字段唯一的好方法是什麼?我有一個存儲mp3文件網址的字段。 URL長度可以是10個字符到4000之間的任何值。我嘗試創建一個索引,它說它不能創建索引,因爲總長度超過了900個字節。SQL Server - nvarchar字段上的索引

如果該字段沒有編入索引,那麼搜索任何內容都會很慢。我正在使用c#,asp.net mvc作爲前端。

問候

Paraminder

+3

也許不容易,因爲*零件在數據庫解決*網址*能*區分大小寫,其他部分不區分大小寫。 –

回答

24

您可以使用CHECKSUM命令並將索引放在具有校驗和的列上。

--*** Add extra column to your table that will hold checksum 
ALTER TABLE Production.Product 
ADD cs_Pname AS CHECKSUM(Name); 
GO 

--*** Create index on new column 
CREATE INDEX Pname_index ON Production.Product (cs_Pname); 
GO 

然後你可以檢索數據的快速使用下面的查詢:

SELECT * 
FROM Production.Product 
WHERE CHECKSUM(N'Bearing Ball') = cs_Pname 
AND Name = N'Bearing Ball'; 

下面是文檔:http://technet.microsoft.com/en-us/library/ms189788.aspx

+0

謝謝Kaspars,我將採取校驗和路徑。 – Parminder

4

可以使用散列函數(雖然理論上它並不能保證兩個不同的標題會有不同的哈希值,但應足夠好:MD5 Collisions),然後應用指數在那一欄。

MD5 in SQL Server

1

您可以創建鏈接的哈希代碼,並使用該整數作爲你的數據庫的唯一索引。請小心將所有字符先轉換爲小寫,以確保所有網址格式相同。相同的URL會生成相同的哈希碼。

+0

恩,URI區分大小寫...... – binki

+0

@binki不是真的..它取決於後備服務器。 RFC規定「..當比較兩個URI以決定它們是否匹配時,客戶端應該使用對整個URI進行區分大小寫的八位字節比較」,但是應該只是一個推薦,所以IIS不是大小寫的敏感,Apache做的。看到這個線程:http://stackoverflow.com/questions/15641694/are-uris-case-insensitive – Oscar

+0

然後,你不能移植到區分大小寫的文件系統或支持大小寫敏感的文件服務器上的遠程存儲的操作系統。有一些原因讓RFC推薦了一些東西......如果MP3存儲在像imgur或YouTube這樣的服務中,那麼key是一個區分大小寫的base64哈希值? – binki