2017-06-21 42 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%' 

看看這是否會給出更好的結果。