나는 런타임을 줄이기 위해 3 가지 방법을 시도했지만 아무리 나에게 해결책을 제안 할 수 있다면 97.00456 초 걸린다. 중첩 된 쿼리를 시도 가입하고 난 왼쪽하여 시도어떻게하면이 쿼리 런타임을 줄일 수 있습니까?
SELECT r.id, r.first_name, r.phone, r.checkin_id, r.device_id, replace(c.`name`,' ','') as device, r.model_id,
cv.`name` as model, r.color_id, cvc.`name` as color, r.network_id, cn.`name` as network, r.problem_id, cp.`name` as problem,
#get pid by concat device detail
IFNULL(
(SELECT id
FROM product
WHERE
#if not admin
#store_id=$input_by AND
#if not admin
name=concat(replace(c.`name`,' ',''),', ',cv.`name`,' - ',cp.`name`)
ORDER BY id DESC
LIMIT 1)
,
(SELECT id
FROM product
WHERE
#if not admin
#store_id=$inout_by AND
#if not admin
name=concat(replace(c.`name`,' ',''),' , ',cv.`name`,' - ',cp.`name`)
ORDER BY id DESC
LIMIT 1)
) AS pid,
#get pid by concat device detail END
IFNULL(
(SELECT id
FROM coustomer as cus
WHERE cus.firstname=r.first_name AND cus.phone=r.phone
LIMIT 1)
,
0
) as cid,
pc.invoice_id as invoice_id,
#(SELECT count(id) FROM invoice WHERE invoice_id=IFNULL((SELECT invoice_id FROM pos_checkin WHERE checkin_id=r.checkin_id),0) LIMIT 1) AS invoice_status,
SUM(ip.amount) as paid,
r.date,
r.input_by,
r.status
FROM checkin_request as r
LEFT JOIN pos_checkin as pc on pc.checkin_id=r.checkin_id
LEFT JOIN invoice_payment as ip on ip.invoice_id=pc.invoice_id
LEFT JOIN checkin as c ON c.id=r.device_id
LEFT JOIN checkin_version as cv ON cv.id=r.model_id
LEFT JOIN checkin_version_color as cvc ON cvc.id=r.color_id
LEFT JOIN checkin_network as cn ON cn.id=r.network_id
LEFT JOIN checkin_problem as cp ON cp.id=r.problem_id
WHERE r.checkin_id IN (
SELECT crt.checkin_id
FROM checkin_request_ticket as crt
)
GROUP BY r.checkin_id
ORDER BY id DESC
LIMIT 5
, , 하위 쿼리를 시도했지만 실패했습니다. 누구나 솔루션을 남겨주세요.
[가장 일반적인 SQL 최적화는 무엇입니까?] (http://stackoverflow.com/questions/1332778/what-are-your-most-common-sql-optimizations) – FirstOne
어떻게 할 수 있습니까? 따라서 메모리 버퍼의 크기 " –
필요한 필드를 반환하고 필요한 행만 반환하여 반환되는 데이터 양을 줄입니다. 이는 데이터를 반환하는 모든 쿼리에 대해 수행 할 때 가장 일반적입니다. –