关于MySQL的IN语句改为JION,确实在性能上会有很大的提升
最开始是很多个 IN
来查询的,但是通过IN
来查询速度明显很慢,因为每个IN
中的select
中的数量都特别的大,导致一次简单的查询需要去遍历一个很大数量的表,导致速度特别的慢。
SELECT
P.ID,
P.TITLE,
P.IMG_1,
P.SALE_UNIT_E_NAME,
P.SHOP_ID,
P.SELL_MODE,
P.SALE_UNIT_E_NAME,
P.MOQ
FROM
PA_COMMODITY P
RIGHT JOIN (
SELECT
S.COMMODITY_ID
FROM
PA_SHOP_CATEGORY C
LEFT JOIN PA_SHOP_CATEGORY_COMMODITY S ON c.ID = S.CATEGORY_ID
WHERE
C.QUOTE_ID = #{id} OR C.ID=#{id} LIMIT 0,12
) CI ON P.ID = CI.COMMODITY_ID
WHERE
P.IS_DELETED = 'n'
AND P.SUBMIT_STATUS = 'RELEASE'
这是修改后的SQL
语句。
今天拿到一个需求,有300多万的数据 需要在数据上完成去重。这个我表示压力很大 因为真的很少手写SQL,一个上午在别人的提示下算是完成了。记录一下。
INSERT INTO
PA_ATOBO_COMPANY2
SELECT c.* from PA_ATOBO_COMPANY c
RIGHT JOIN
(select b.id from
(select max(a.id) as id from PA_ATOBO_COMPANY a group by a.COMPANY_ATOBO_WEB_SITE
) b
) d on d.id = c.id;
转存到另一张表。这个的效率还是高的。
中间出了一个小问题。在使用右联接的时候select *
和select c.*
含义不一样