VARCHAR列的索引

时间:2013-11-04 23:08:15

标签: sql sql-server

我有一个包含32,589行的表,其中一列称为“位置”,并且是Varchar(40)列类型。该列包含一个位置,实际上是一个郊区,全部是大写文本。

使用此表的函数执行:

IF EXISTS(SELECT * FROM MyTable WHERE Location = 'A Suburb')
...

为了提高效率,为此列添加索引是否有益?这是一个只读表,因此除了维护之外没有太多的编辑或插入。

3 个答案:

答案 0 :(得分:3)

如果没有索引,SQL Server必须执行表扫描才能找到您要查找的位置的第一个实例。你可能会很幸运,并且价值在前几行之一,但它可能在第32,000行,这将是浪费时间。添加索引只需要几秒钟,您可能会看到很大的性能提升。

答案 1 :(得分:0)

我同意@Brian Shamblen的回答。 另外,尝试在内部选择中使用TOP 1

IF EXISTS(SELECT TOP 1 * FROM MyTable WHERE Location = 'A Suburb')

您不必选择符合EXISTS条件的所有记录,一个就够了。

答案 2 :(得分:0)

性能调优的机会主义方法通常是一个坏主意。

要回答具体问题 - 如果您的函数在where子句中使用location,并且该表有超过几百行,并且location列中的值不完全相同,那么创建索引将加快您的速度功能。

您是否注意到任何差异很难说 - 潜伏在数据库中可能存在更大的性能问题,您可能正在修复错误的问题。