如何优化这个mysql查询?我使用OR运算符
我得到了如下mysql查询:如何优化这个mysql查询?我使用OR运算符,mysql,query-optimization,Mysql,Query Optimization,我得到了如下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 '
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\u sn'和'goods\u name'字段添加了索引。您可以在下面看到mysql捕获。使用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%'
看看这是否能提供更好的结果。你们有关于
a.goods\u sn
和b.goods\u name
的索引吗?你们说的“ALL”是什么意思?对不起,我没看到图片。问题是,当您使用%
时,整个表将被逐行扫描以进行匹配。正如@FMashiro所建议的,尝试在没有%
的情况下查找准确的单词,或者修改模式和查询以查找y IDP。请通过格式化问题来改进您的提问方式。读了3遍后我无法理解它。@PrabhatG,如果我像“%field%”一样使用%s,它可能会导致所有表扫描,但是如果我像“field%”一样将%s运算符放在字段后面,它应该使用index来查询