我有以下兩個查詢,我不知道有什麼更高效的做法: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 2011-04-07 22:13:27