Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何优化这个mysql查询?我使用OR运算符_Mysql_Query Optimization - Fatal编程技术网

如何优化这个mysql查询?我使用OR运算符

如何优化这个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 '

我得到了如下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\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来查询