我有一个LEFT JOIN select语句,用于从2个表中检索值:tableA和tableB。语法如下:
SELECT tableA.first, tableA.middle, tableA.last, tableB.full FROM tableA LEFT JOIN
tableB ON tableB.full LIKE concat('%',tableA.middle,'%');
此法规的最佳索引类型是什么?我在tableB.full上尝试了一个但是根据我的EXPLAIN语句,它没有被使用。
注意:虽然这可能很明显,但我是一个加入陈述的新手。 THX。
答案 0 :(得分:2)
条件
`field` LIKE '%foo'
无法使用索引进行优化。你应该避免这种情况。
答案 1 :(得分:0)
Here它说:
以下SELECT语句没有 使用索引:
SELECT * FROM tbl_name WHERE key_col LIKE '%Patrick%'; SELECT * FROM tbl_name WHERE key_col LIKE other_col;
在第一个声明中,
LIKE
值以通配符开头 字符。在第二个声明中,LIKE
值不是常量。如果您使用
... LIKE '%string%'
和string
超过三个 字符,MySQL使用Turbo Boyer-Moore算法初始化 然后是字符串的模式 使用此模式执行 更快地搜索。
不幸的是,我不知道在这种情况下,Turbo Boyer-Moore算法是否可以从索引中受益。