MS SQL Server 2005上的索引varchar

时间:2008-10-15 21:07:45

标签: sql sql-server-2005

我需要在MS SQL Server 2005中索引我的表上的varchar字段,但我不清楚如何这样做。如果我尝试在字段上添加非聚集索引,则表示“mytable”表中的“列'xxxx'的类型无效,无法用作索引中的键列”

我的表有一个自动增加的int ID,它被设置为表中的主键。如果我将此属性设置为索引,然后将我的varchar列添加为“包含列”,则索引将完成。但我不确定这是我想要的 - 我希望能够仅基于varchar字段搜索表,而我对索引的理解是必须提供所有索引元素才能真正看到查询中的加速,但是我不想要包含int ID(因为我不知道它是什么,在给定的查询时)。

我是不是想错误地做这件事? ID +我的varchar作为一个包含的列能完成我想要的吗?

5 个答案:

答案 0 :(得分:10)

你的varchar(max)?我认为不允许在索引中使用它们。

否则,发布您的CREATE TABLE语句,通常在向索引添加varchar时没有问题。

答案 1 :(得分:4)

我假设你的是一个VARCHAR(MAX)列,正如错误所说,它是索引的invalida数据类型。建议:创建一个计算列,该列是VARCHAR(MAX)列的哈希值(例如,使用HashBytes函数),然后仅在计算列上创建索引。然后,在SQL DML的搜索条件(例如WHERE子句)中,您将同时使用VARCHAR(MAX)搜索值本身加上 VARCHAR(MAX)搜索值的哈希值。你的桌子。将搜索值的散列封装在“帮助程序”存储过程中可能是个好主意。

答案 2 :(得分:2)

不,ID + varchar列不起作用。这对于查询ID并且只选择ID或/和varchar列的查询非常有用 - 那么你就有了覆盖索引,只有通过查看索引才能检索所有内容。

我猜你的ID列上有一个聚簇索引,因为它是主键。然后,您需要在varchar列上创建一个非聚集索引 - 这应该是可能的。非聚集索引也将自动包含ID。

还要记住,索引只适用于WHERE VarcharColumn ='xyz'和WHERE VarcharColumn LIKE'xyz%'等查询。

LIKE'%xyz%'和'%xyz'查询无效。

答案 3 :(得分:1)

默认情况下将列设置为主键会创建聚簇索引,因此您不必创建另一个INT + VARCHAR索引。

您正在寻找的是单独的VARCHAR上的索引 - 没有+ INT,因为您的主键是隐式包含的 - 所有SQL Server应该能够在执行索引查找时找到实际的行。但是有一个限制,我相信索引列的整体大小应该是< 900字节(至少是SQL Server 2000)。你的VARCHAR有多长时间?

答案 4 :(得分:0)

您无需在主键中包含varchar字段即可将其编入索引。要创建索引,只需在Management Studio中修改表,单击Manage Indexes and Keys按钮,然后单击Add以添加新索引。然后选择VARCHAR字段。应该没问题。