我有四个具有相同结构的表(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
");
我这样做是因为我首先要用一个词,然后是两个,然后是三个,以及其他词来显示结果。
有没有其他方法可以做到这一点因为这种方式很慢。
答案 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;
这个查询只有问题,它会改变表的输出结构。