我需要在此SQL Server表上创建哪些索引?

时间:2010-10-07 23:24:15

标签: sql-server sql-server-2008 full-text-search indexing

我有一个SQL Server 2008 db的以下sql查询。

SELECT TOP(@NumberOfStreetResults) LocationType, LocationId, Name
FROM [dbo].[LocationNames] 
WHERE CONTAINS(Name, @SearchQuery)
    AND LocationType = 7

注意我是如何使用CONTAINS关键字的?我在Name字段上有 FTS

我不确定手动添加到表中需要哪些索引,因为此查询在我们的系统中非常常见。

我是否只需要针对LocationType添加索引?

更新

这是查询图表......

alt text

alt text

2 个答案:

答案 0 :(得分:0)

只是索引是SQL中的临时表,它保留索引列的副本的排序。插入新行时,SQL会将临时表中的新记录放在正确的位置,以便索引具有以下结果:

A)优点:

1)提高搜索速度,因为该表是基于索引字段在临时表中排序的

B)缺点:

1)减慢CRUD(创建,读取,更新,删除),因为如果需要,应该对临时表执行相同的操作。

2)由于使用临时表,数据库大小增加。

<强>结论:

对您经常将其作为搜索条件(WHERE)

引用的字段使用索引

答案 1 :(得分:0)

如果您的LocationType具有高度选择性,那么我的建议是在该表上创建一个覆盖索引,其中键为LocationType,并在您的包含列列表中添加LocationId