我有一个包含32,589行的表,其中一列称为“位置”,并且是Varchar(40)
列类型。该列包含一个位置,实际上是一个郊区,全部是大写文本。
使用此表的函数执行:
IF EXISTS(SELECT * FROM MyTable WHERE Location = 'A Suburb')
...
为了提高效率,为此列添加索引是否有益?这是一个只读表,因此除了维护之外没有太多的编辑或插入。
答案 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列中的值不完全相同,那么创建索引将加快您的速度功能。
您是否注意到任何差异很难说 - 潜伏在数据库中可能存在更大的性能问题,您可能正在修复错误的问题。