【发布时间】:2012-12-23 05:21:15
【问题描述】:
我需要在两个表上选择任何出现的单词(关键字搜索),我所做的查询是这样的:
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%';
任何帮助将不胜感激......谢谢。
【问题讨论】:
-
您使用的是哪个数据库引擎?
-
MyIsam ... 表是以前构建的,我正在修复错误
-
如果您有 MyISAM 表,那么您可以使用 MATCH..AGAINST 关键字在多个列中搜索字符串。检查我的答案,它将让您了解如何在查询中使用 MATCH..AGAINST
-
是的,我想...但并非所有这些都是 MyISAM :(