다음과 같은 두 가지 쿼리가 있는데 더 효율적으로 할 수있는 것이 무엇인지 궁금합니다. a) 하위 쿼리와 내부 조인을 사용하거나 b) CONVERT_TZ()를 여러 번 호출하는 방법?하위 쿼리와 실행중인 함수의 효율성이 여러 번입니까?
아니면 더 효율적인 방법이 있습니다. 어떤 아이디어라도 감사 할 것입니다!
쿼리가 수행하는 작업은 이미 저장된 오프셋 값을 사용하여 DATETIME을 다른 시간대 (EDT : GMT-4)로 변환하는 것입니다. 프로덕션 환경에서이 쿼리를 실행할 때 수천 개의 레코드가 있습니다.
USE weblist;
SELECT metropolitan_area
,date_time
,gmt_offset
,gmt_offset + 4 AS hours
,CONVERT_TZ(date_time, CONCAT(gmt_offset, ':00'), '-4:00') AS EDT
,DAYOFMONTH(date_time) AS day
,MONTH(date_time) AS month
,DATE_FORMAT(date_time, '%h:%i %p') AS date_time_
,DAYOFMONTH(CONVERT_TZ(date_time, CONCAT(gmt_offset, ':00'), '-4:00')) AS dayEDT
,MONTH(CONVERT_TZ(date_time, CONCAT(gmt_offset, ':00'), '-4:00')) AS monthEDT
,DATE_FORMAT(CONVERT_TZ(date_time, CONCAT(gmt_offset, ':00'), '-4:00')
,'%h:%i %p') AS date_timeEDT
FROM weblist
ORDER BY gmt_offset DESC;
SELECT cl.metropolitan_area
,cl.date_time
,edt.date_timeEDT
,DAYOFMONTH(cl.date_time) dayOrg
,MONTH(cl.date_time) AS monthOrg
,TIME_FORMAT(cl.date_time, '%h:%i %p') AS dateTimeOrg
,DAYOFMONTH(edt.date_timeEDT) dayEDT
,MONTH(edt.date_timeEDT) AS monthEDT
,TIME_FORMAT(edt.date_timeEDT, '%h:%i %p') AS dateTimeEDT
FROM (
SELECT
id
,CONVERT_TZ(date_time, CONCAT(gmt_offset, ':00'), '-4:00') AS date_timeEDT
FROM weblist
) edt
INNER JOIN weblist AS cl ON cl.id = edt.id
ORDER BY cl.gmt_offset DESC;
'WITH'는 mysql이 지원하지 않는다는 점을 제외하고는 여기에서 매우 좋을 것입니다 ... – dancek