【发布时间】:2017-06-21 09:22:51
【问题描述】:
我得到一个这样的 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
【问题讨论】:
-
您在
a.goods_sn和b.goods_name上有索引吗? -
输入“ALL”是什么意思?
-
对不起,没看到图片。问题是,当您使用
%时,会扫描整个表,即逐行扫描以进行匹配。正如@FMashiro 建议的那样,尝试在没有%的情况下找到确切的单词或修改架构和查询以找到 y ID -
请通过格式化改进您提出问题的方式。看了3遍没看懂。
-
@PrabhatG ,如果我使用 % like "%field%",它可能会导致所有表扫描,但是如果我将 % 运算符放在像 'field%' 这样的字段后面,它应该使用索引来查询