使用convert\u tz会导致性能问题吗?

vm0i2vca  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(272)

我们正在计划是改变整个数据库的时区,还是在所有函数和事件中使用convert泷tz。
是否有任何性能问题是我们决定使用convert时考虑到它可能是每分钟转换和比较数百万行和事件?

gzszwxb4

gzszwxb41#

这真的取决于你计划在哪里使用 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子句中 Package 列,这将迫使mysql对函数求值,然后对表中的每一行进行比较。
不要这样做:

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仍然引用 predicate 中的裸列(where子句和on子句中的条件),那么添加 CONVERT_TZ sql中其他位置的函数不应该对性能造成重大影响。

相关问题