如何优化这个mysql查询 - %a%或

时间:2016-02-02 09:31:41

标签: mysql

SELECT DISTINCT u.id AS userId,u.type AS userType 
FROM User AS u,Personal AS p,Company AS c 
WHERE (p.realName LIKE '%adf%' AND u.type=1 AND u.id=p.userId) 
OR (c.name LIKE '%grge%' AND u.id=c.userId) 
LIMIT 0 , 10000

2 个答案:

答案 0 :(得分:0)

您可以将查询编写为:

SELECT DISTINCT u.id AS userId,u.type AS userType 
FROM User AS u inner join Personal AS p on u.id=p.userId
               inner join Company AS c on u.id=c.userId
where p.realName LIKE '%adf%' or c.name LIKE '%grge%'
LIMIT 0 , 10000

尽量避免使用逗号分隔的JOINS

答案 1 :(得分:0)

您似乎正在进行非常可怕的交叉连接,然后有选择地缩小WHERE子句中的记录。

最好做2个查询并将结果合并在一起。每个查询都可以进行一次正确的连接它仍然需要使用LIKE访问一个列,并使用一个不会很快的前导外卡(它不能使用索引)。

id=123
location='/data/$id/app'
location=${location/\$id/$id}
echo $location  # /data/123/app