从多个表中选择(大数据)

时间:2012-04-29 11:10:48

标签: mysql union large-data

我有四个具有相同结构的表(id,var1,var2)

var1中的表1只有一个单词(150000+条记录)

var1中的表2有两个单词(50000+条记录)

var1中的表3有三个单词(50000+条记录)

var1中的表4有四个或更多单词(30000+个记录)

搜索它们的最佳方式是什么?

我搜索如下:

SELECT * FROM (
(SELECT * FROM table1 WHERE var1 LIKE '".$searchWord."' ORDER BY var1)
UNION
(SELECT * FROM table2 WHERE var1 LIKE '".$searchWord." %' OR var1 LIKE '% ".$searchWord." %' OR var1 LIKE '% ".$searchWord."' ORDER BY var1)
UNION
(SELECT * FROM table3 WHERE var1 LIKE '".$searchWord." %' OR var1 LIKE '% ".$searchWord." %' OR var1 LIKE '% ".$searchWord."' ORDER BY var1)
UNION
(SELECT * FROM table4 WHERE var1 LIKE '".$searchWord." %' OR var1 LIKE '% ".$searchWord." %' OR var1 LIKE '% ".$searchWord."' ORDER BY var1)
) AS WHOLEDATABASE ORDER BY var1
");

我这样做是因为我首先要用一个词,然后是两个,然后是三个,以及其他词来显示结果。

有没有其他方法可以做到这一点因为这种方式很慢。

2 个答案:

答案 0 :(得分:0)

你可以组合结果然后使用长度(var1)排序,Union很麻烦

答案 1 :(得分:0)

你尝试过使用concat吗?如果所有的搜索和订单字段都被编入索引,我认为concat不会花费任何额外的时间。

示例:

SELECT * 
FROM table1, table2, table3, table4 
WHERE concat_ws(' ',table1.var1, table2.var1, table3.var1, table4.var1) like '%"'.$searchWord.'"%' 
ORDER BY table1.id, table2.id, table3.id, table4.id;

这个查询只有问题,它会改变表的输出结构。