2017-06-21 45 views
-1

我有这样的MySQL查询:我该如何优化这个mysql查询?我使用或操作

select a.goods_id, 
     a.site_id, 
     b.goods_name, 
     a.cost, 
     a.stock 
from rs_goods as a 
inner join rs_goods_multi as b 
    on a.goods_id = b.goods_id 
where a.goods_sn LIKE 'sweater005%' 
OR b.goods_name LIKE 'sweater005%'; 

,它显示了型“ALL”,也许是“OR”的原因是,如何优化它,我不得不添加索引字段“ goods_sn'和'goods_name'。你可以看到下面的mysql捕获。 mysql capture

+0

你有'a.goods_sn'和'b.goods_name'上的索引吗? – FMashiro

+0

是的,我为这两个字段添加索引 – williamzid

+0

您是否必须使用通配符(%)?或者你可以只搜索确切的产品名称? – FMashiro

回答

0

使用UNION从查询中删除OR,通常可以获得更好的结果,因为每个查询都可以有效地使用单个索引。

select a.goods_id, 
     a.site_id, 
     b.goods_name, 
     a.cost, 
     a.stock 
from rs_goods as a 
inner join rs_goods_multi as b 
    on a.goods_id = b.goods_id 
where a.goods_sn LIKE 'sweater005%' 
UNION 
select a.goods_id, 
     a.site_id, 
     b.goods_name, 
     a.cost, 
     a.stock 
from rs_goods as a 
inner join rs_goods_multi as b 
    on a.goods_id = b.goods_id 
where b.goods_name LIKE 'sweater005%' 

看看这是否会给出更好的结果。