繁体   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