开发者

Efficiency of subqueries vs running functions several times?

开发者 https://www.devze.com 2023-02-22 17:18 出处:网络
I have the following two queries and I wonder what\'s more efficient to do: a) to use a subquery and an inner join or b) to call CONVERT_TZ() several times?

I have the following two queries and I wonder what's more efficient to do: a) to use a subquery and an inner join or b) to call CONVERT_TZ() several times?

Or maybe there's a more efficient way. Any ideas will be appreciated!

What the queries do is convert a DATETIME from one timezone to another (EDT:GMT-4 in this case) using the offset value already stored. I will have a few thousands of records when running this query in production.

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(da开发者_运维百科te_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;


If you are wondering which is more efficient, decided which metrics you would use to measure efficiency and then measure them. Anything else is just guessing.


I'd vote for the multiple CONVERTs. I think I've read that mysql is smart enough to notice that they're all the same, so it will only do the math once for each row.

Also, think about what happens when you want to add a WHERE clause. Are you always going to remember to add it to the inner and outer SELECT statements in weblist?

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号