MySQL exists 優化 in 效率

haoge0205發表於2016-06-08
EXISTS用於檢查子查詢是否至少會返回一行資料,該子查詢實際上並不返回任何資料,而是返回值True或False

原句,執行時間:2.78s

UPDATE pro_ProductEvaluate
SET hasPic = 1
WHERE
ID IN (
SELECT
c.ID
FROM
(
SELECT
a.ID
FROM
pro_ProductEvaluate a
INNER JOIN pro_ProductEvaluateImage b ON a.ID = b.pro_ProductEvaluateID
WHERE
1 = 1
AND a.CreateTime >= '2016-06-03 01:05:00'
AND a.hasPic IS NULL
AND b.State = 1
) c
)





優化後:執行時間:0.38s
update pro_ProductEvaluate
set hasPic=1
where CreateTime>= '2016-06-03 01:05:00' and hasPic is null
and exists(
select 1 from pro_ProductEvaluateImage b 
where b.State=1 and pro_ProductEvaluate.id=b.pro_ProductEvaluateID
)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28939273/viewspace-2117318/,如需轉載,請註明出處,否則將追究法律責任。

相關文章