2013-05-27 67 views
2

我使用,我下载了其他地方的表,他们把一个叫DATA_SOURCE列其所有串接一个记录的不同数据源,像这样:可以对MySQL列编制索引以改善LIKE搜索吗?

sourceA; sourceB; sourceC; ...

所以,如果我要寻找记录从sourceB,我会做一个像搜索上%sourceB%

这显然是一个耗时的查询。我的问题是,如果我要索引列DATA_SOURCE,它是否会提高这些通配符搜索的性能?或者它不会有所作为。

+0

你会好起来的,改制成为这个[第一范式(http://en.wikipedia.org/wiki/First_normal_form),那么你就能够满意指数吧。 –

+0

我同意,谢谢马丁。 – ktm5124

回答

6

号索引像搜索被使用,但仅如果搜索绕圈不以通配符开始

所以LIKE 'Albert %'将可转位,而LIKE '%Einstein%'不会。

之所以这样,是当然,所有的指数并是构建体,其中所述的结果是当由该列排序,以减少从线性到对数复杂的搜索的内部表的。如果搜索绕圈使用通配符启动时,它仍然会遍历所有可能的值来匹配他们(所谓表扫描),从而消除索引的潜在性能增益。

+0

谢谢!这就是我曾经想过,想确定:-) – ktm5124

+0

其实我的答案是没有完全* *完整的:因为你只是想搜索完整的话,如果我理解正确的问题,全文索引可能实际工作如果您使用MyISAM进行存储。这当然是一个非常冒险的解决方法,因为没有像其他地方建议的那样进行正常规范化,但如果技术限制禁止从根本上更好的解决方案,它可能会起作用。 –

+0

我们在任何地方都使用InnoDB,因此切换这个实例可能不是一个好主意。我想,正如你所提到的,一个更好的主意是为数据源创建一个单独的查找表,然后加入。 – ktm5124

相关问题