Эффективность подзапросов против запуска функций в несколько раз? - PullRequest
0 голосов
/ 08 апреля 2011

У меня есть два следующих запроса, и мне интересно, что более эффективно сделать: а) использовать подзапрос и внутреннее объединение или б) несколько раз вызвать 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;

Ответы [ 2 ]

2 голосов
/ 08 апреля 2011

Если вам интересно, что является более эффективным, решите, какие показатели вы будете использовать для измерения эффективности, а затем измерьте их.Все остальное просто гадание.

0 голосов
/ 08 апреля 2011

Я бы проголосовал за несколько конвертов.Я думаю, что я прочитал, что MySQL достаточно умен, чтобы заметить, что они все одинаковые, поэтому он будет делать математику только один раз для каждой строки.

Кроме того, подумайте о том, что происходит, когда вы хотите добавитьГДЕ оговорка.Вы всегда будете помнить, чтобы добавить его к внутренним и внешним операторам SELECT в веб-списке?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...