MySQL单词+单词搜索

时间:2011-06-21 13:21:19

标签: mysql search select concatenation

我有两个表:Dictionary,Names。 两个表都有大量行(如200.000)。

词典中的列:id,word

名称中的列:id,name

我需要选择所有名称,即Dictionary.word + Dictionary.word(类似于同一列的串联,适用于所有变体)

另外,我需要快速查询,而不需要花费数小时才能加载... 关于这个速度 - 如果要求被设置为像“min 5 chars”这样的列/单词比较,我会很满意...

4 个答案:

答案 0 :(得分:1)

这应该有效:

SELECT `N`.`name`
FROM `Names` `N`
INNER JOIN `Dictionary` `D` ON `N`.`name` = CONCAT(`D`.`word`, `D`.`word`);

新查询:

SELECT `N`.`name`
FROM `Names` `N`
INNER JOIN `Dictionary` `D`
INNER JOIN `Dictionary` `D1`
WHERE `N`.`name` = CONCAT(`D`.`word`, `D1`.`word`);

答案 1 :(得分:0)

这会尝试使用d.word上的索引来获取答案。

SELECT *
FROM Names n
JOIN Dictionary d1
JOIN Dictionary d2
WHERE 
    LEFT(n.name, LENGTH(n.name)/2) = d1.word
AND RIGHT(n.name, LENGTH(n.name)/2) = d2.word
AND n.name = CONCAT(d1.word, d2.word);

答案 2 :(得分:0)

根本不确定速度:

SELECT n.*
FROM Names AS n
  JOIN Dictionary AS d1
    ON n.name LIKE CONCAT(d1.word, '%')
  JOIN Dictionay AS d2
    ON d1.id <= d2.id
WHERE n.name = CONCAT(d1.word, d2.word))

答案 3 :(得分:-1)

试试这个:

SELECT * FROM `Names` `n`
INNER JOIN `Dictionary` `d`
ON `d`.`word` IS NOT NULL
AND (`n`.`name` LIKE CONCAT(`d`.`word`,`d`.`word`));

更新

SELECT * FROM `Names` `n`
INNER JOIN `Dictionary` `d1`
INNER JOIN `Dictionary` `d2`
        ON `n`.`name` = CONCAT(`d1`.`word`,`d2`.`word`) 
        OR `n`.`name` LIKE CONCAT(`d1`.`word`,`_%`) 
        OR `n`.`name` LIKE CONCAT(`d2`.`word`,`_%`)