“LIKE”或“=”运算符不使用索引查找

时间:2013-11-11 10:30:33

标签: tsql sql-server-2012 clustered-index

得到以下查询

SELECT * FROM myDB.dbo.myTable 
WHERE name = 'Stockholm'

SELECT * FROM myDB.dbo.myTable 
WHERE name LIKE('Stockholm')

我创建了一个全文索引,当我使用CONTAINS(name,'Stockholm')时会采用该索引,但在上面的两种情况下,它只执行聚簇索引扫描。这是缓慢的,超过1秒。我有点困惑,因为我只想搜索完全匹配,这应该和CONTAINS()一样快,不是吗?我已经读过LIKE应该至少使用一个索引,如果你没有分别使用通配符,而不是在你要搜索的单词的开头使用通配符。 提前谢谢

2 个答案:

答案 0 :(得分:3)

我敢打赌你的名字栏上没有索引。全文索引不是数据库索引,不使用,除非您使用像CONTAINS这样的全文谓词。

答案 1 :(得分:0)

正如@Panagiotis Kanavos和@Damien_The_Unbeliever所述,我的名字栏上没有“非全文”索引。我只需要使用以下查询添加索引:

CREATE INDEX my_index_name
ON myDB.dbo.myTable (name)

这将性能从略高于一秒提升到不到一秒。