關(guān)于MySQL的IN語句改為JION,確實(shí)在性能上會(huì)有很大的提升
最開始是很多個(gè) IN
來查詢的,但是通過IN
來查詢速度明顯很慢,因?yàn)槊總€(gè)IN
中的select
中的數(shù)量都特別的大,導(dǎo)致一次簡單的查詢需要去遍歷一個(gè)很大數(shù)量的表,導(dǎo)致速度特別的慢。
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
語句。
今天拿到一個(gè)需求,有300多萬的數(shù)據(jù) 需要在數(shù)據(jù)上完成去重。這個(gè)我表示壓力很大 因?yàn)檎娴暮苌偈謱慡QL,一個(gè)上午在別人的提示下算是完成了。記錄一下。
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;
轉(zhuǎn)存到另一張表。這個(gè)的效率還是高的。
中間出了一個(gè)小問題。在使用右聯(lián)接的時(shí)候select *
和select c.*
含義不一樣