2010-11-15 51 views
1

我有一個LEFT JOIN select語句,它從兩個表中檢索值: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

條件

`field` LIKE '%foo' 

不能與索引進行優化。你應該避免這種情況。

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是超過3個 字符,MySQL使用的Turbo 博耶-Moore算法初始化 該字符串的模式,然後 使用此模式來更快速地執行 搜索。

不幸的是,我不知道在這種情況下Turbo Boyer-Moore算法是否可以從索引中受益。