数据库
首页 > 数据库> > MySQL查询喜欢

MySQL查询喜欢

作者:互联网

我需要在两个表上选择任何出现的单词(关键字搜索),而我所做的查询是这样的:

SELECT t1.fname, t1.lname, t2.* FROM t1 , t2  
     WHERE t2.title LIKE "%test%" 
     OR t2.desc LIKE "%test%" 
     OR t2.inc LIKE "%test%" 
     OR t1.fname LIKE "%test%" 
     OR t1.lname LIKE "%test%" 
     AND t1.c_id = t2.c_id;

由于数据库中有大量数据,因此这种特殊的搜索(带有“ test”关键字)需要几分钟的时间,我想知道如何对其进行优化.
我尝试使用LEFT JOIN,但似乎我做错了-结果延迟很多,但是查询执行得非常快.

就像这样:

SELECT * FROM t2 AS a 
  LEFT JOIN t1 AS b ON a.c_id = b.c_id 
    WHERE a.desc LIKE '%test%' 
     OR a.title LIKE '%test%' 
     OR a.inc LIKE '%test%' 
     OR b.fname LIKE '%test%'  
     OR b.lname LIKE '%test%';

任何帮助将不胜感激…谢谢.

解决方法:

您的第一个语句不是您想要的:AND子句比OR接受precedence,因此您实际上已经编写了

t2.title LIKE "%test%" 
OR t2.desc LIKE "%test%" 
OR t2.inc LIKE "%test%" 
OR t1.fname LIKE "%test%" 
OR (t1.lname LIKE "%test%" AND t1.c_id = t2.c_id;)

最终,这会导致t1和t2之间的(有些偏斜)natural join返回许多行.

标签:select,sql-like,sql,mysql
来源: https://codeday.me/bug/20191031/1975590.html