MySQL高效多表多指标选择

时间:2013-04-11 15:36:35

标签: mysql database select indexing

我想从数据库中的两个表中按名称1或名称2进行搜索。

重要提示:只有部分名称具有与之关联的辅助名称。

表n1和n2如下:

table n1
|---------------*----------------*-----------------|
| id            | name1          | n2_id           |
|---------------*----------------*-----------------|
| 1             | Joseph         | 1               |
| 2             | David          | NULL            |
| 3             | James          | 2               |
|---------------*----------------*-----------------|

table n2
|---------------*----------------|
| id            | name2          |
|---------------*----------------|
| 1             | Joe            |
| 2             | Jim            |
|---------------*----------------|

(我知道我可以在n1表中创建一个名称2字段,但这只是对需要此结构的更复杂系统的简化。)

我目前从表n1中选择如下:

SELECT id, name1, MATCH ( name1 ) AGAINST ( "+joe*") AS score 
FROM n1 
WHERE MATCH ( name1 ) AGAINST ( "+joe*" in boolean mode) 
order by score desc;

对于非常大的表格,这非常有效。

但是,我想从n1和n2中选择匹配搜索字符串的匹配名称1或名称2(如果存在),就好像两个表都已合并一样。

问题在于,当多个表中存在不同的索引时,我遇到了按组合分数排序的选择效率问题。

这个问题并不仅仅是关于如何构造SELECT。它是关于如何以有效使用索引的方式构造SELECT。 (表非常大)

1 个答案:

答案 0 :(得分:0)

试试这个

SELECT 
n1.id, name1, n2_id, n2.id, name2 
FROM n1 LEFT OUTER JOIN n2 ON
n2.id = n2_id 
WHERE name1 LIKE '%j%' OR name2 LIKE '%j%'
ORDER BY name1;

由于

,我使用了LEFT OUTER JOIN
  

“只有一些名称具有与之关联的辅助名称。”

我将两个基于n2_id的表与n2中的id字段组合在一起。

我使用mysql LIKE进行字符串比较。

以下是SQLFIDDLE