1

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

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

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

var1 中的表 3 有 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
");

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

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

4

2 回答 2

0

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

于 2012-04-29T11:21:34.827 回答
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;

这个查询的唯一问题是,它会改变表的输出结构。

于 2012-04-29T14:51:26.623 回答