为连接语句创建索引

时间:2010-11-15 00:09:56

标签: mysql

我有一个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。

2 个答案:

答案 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算法是否可以从索引中受益。