0

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

使用此表的函数执行以下操作:

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

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

4

3 回答 3

3

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

于 2013-11-04T23:13:56.940 回答
0

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

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

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

于 2013-11-04T23:15:40.517 回答
0

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

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

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

于 2013-11-04T23:36:45.510 回答