我对我的mysql查询有疑问,它非常非常慢。
SELECT s0_.sku AS sku_2,
(SELECT count(s1_.id) AS sclr_45
FROM store_product s1_
WHERE s1_.sku IS NOT NULL AND s1_.sku <> '' AND s1_.store_id = s0_.store_id AND s1_.sku = s0_.sku
OR s1_.sku = REPLACE(REPLACE(REPLACE(REPLACE(s1_.sku, '-', ''), '.', ''), '/', ''), ' ', '')) AS sclr_44
FROM store_product s0_
WHERE s0_.store_id = 5
GROUP BY s0_.id
HAVING sclr_44 > 5
ORDER BY s0_.sku ASC
特别是这部分OR s1_.sku = REPLACE(REPLACE(REPLACE(REPLACE(s1_.sku, '-', ''), '.', ''), '/', ''), ' ', '')) AS sclr_44
如果我删除它,查询速度很快。我需要使用替换函数,因为我想显示所有重复的sku,如111和11.1,它们是相同的,因为替换函数删除了点。
如何提高性能?现在在本地数据库上,查询已经执行超过一分钟..如果我删除替换,时间小于1秒。
在主选择中有更多的列
编辑;
我的解释计划
**
**
1条答案
按热度按时间zz2j4svz1#
您可能希望将“replaced”字段与s0_.sku进行比较,而不是与其本身(s1_.sku)进行比较。
祝你好运