Это действительно зависит , где вы планируете использовать функцию CONVERT_TZ
.
Например, если она обернута вокруг столбца в предложении WHERE
, это отключит возможность MySQLиспользовать операцию сканирования диапазона индекса.И это может иметь существенное влияние на производительность или вызвать «проблемы с производительностью».
Например, если этот запрос использует сканирование диапазона индекса для индекса с mydatetime
в качестве ведущего столбца, выбирая лишь несколькоиглы из большого стога сена:
SELECT t.foo
FROM my_huge_table t
WHERE t.mydatetime >= '2018-10-09 14:30'
AND t.mydatetime < '2018-10-09 15:15'
Добавление функции CONVERT_TZ
вокруг литералов не вызовет проблем с производительностью.Производительность будет такой же:
SELECT t.foo
FROM my_huge_table t
WHERE t.mydatetime >= CONVERT_TZ('2018-10-09 08:30','EST5EDT','UTC')
AND t.mydatetime < CONVERT_TZ('2018-10-09 09:15','EST5EDT','UTC')
Но если мы обернем столбцы в предложении WHERE в функции, это заставит MySQL оценить функцию, а затем выполнить сравнение, и это будет сделанодля каждой строки в таблице.
Do NOT сделать это:
SELECT t.foo
FROM my_huge_table t
WHERE CONVERT_TZ(t.mydatetime,'UTC','EST5EDT') >= '2018-10-09 08:30'
AND CONVERT_TZ(t.mydatetime,'UTC','EST5EDT') < '2018-10-09 09:15'
Покапоскольку SQL по-прежнему ссылается на голые столбцы в предикатах (условия в выражении WHERE и ON), добавление функций CONVERT_TZ
в другие места в SQL не должно оказывать существенного влияния на производительность.