这真的取决于你计划在哪里使用 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')
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'
1条答案
按热度按时间gzszwxb41#
这真的取决于你计划在哪里使用
CONVERT_TZ
功能。例如,如果它在
WHERE
子句,这将禁用mysql使用索引范围扫描操作的能力。这可能会对性能产生重大影响,或导致“性能问题”。例如,如果此查询对具有
mydatetime
作为主要专栏,从大海捞针:添加
CONVERT_TZ
围绕文本的函数不会导致性能问题。性能相同:但是如果我们在函数的where子句中 Package 列,这将迫使mysql对函数求值,然后对表中的每一行进行比较。
不要这样做:
只要sql仍然引用 predicate 中的裸列(where子句和on子句中的条件),那么添加
CONVERT_TZ
sql中其他位置的函数不应该对性能造成重大影响。