2014-02-07 133 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