我正在使用我在其他地方下载的表,他们放了一个名为DATA_SOURCE
的列,它连接记录的所有不同数据源,如下所示:
sourceA; sourceB; sourceC; ...
因此,如果我正在寻找sourceB
的记录,我必须在%sourceB%
上进行搜索。
这显然是一个耗时的查询。我的问题是,如果我要将列DATA_SOURCE
编入索引,它是否会提高搜索这些通配符的性能?或者它不会有所作为。
答案 0 :(得分:6)
没有。索引将用于类似搜索,但仅如果搜索条件没有使用通配符开始。
因此LIKE 'Albert %'
可转化,而LIKE '%Einstein%'
则不会。
原因当然,所有索引都是构造一个内部表,其中列出了按该列排序时的结果,以便将搜索从线性减少到对数复杂度。如果搜索标准以通配符开头,它仍然必须遍历所有可能的值以匹配它们(所谓的表扫描),从而消除了索引的潜在性能增益。