哪个查询datetime\u add和datetime\u sub更快?

ddarikpa  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(244)

我有一个面试问题,下面两个sql语句中哪一个更快?假设使用registration\u timestamp列对表进行索引。解释原因。
查询1

SELECT 
  name
FROM 
  user_table
WHERE 
  DATE(DATETIME_ADD(registration_timestamp, INTERVAL 7 HOUR))
         >= DATE(‘2018-01-01’)
  AND 
  DATE(DATETIME_ADD(registration_timestamp, INTERVAL 7 HOUR)) 
         < DATE(‘2019-01-01’)

查询2

SELECT 
  name
FROM 
  user_table
WHERE 
  registration_timestamp
>= DATETIME_SUB(‘2018-01-01’, INTERVAL 7 HOUR)
  AND 
  registration_timestamp
< DATETIME_SUB(‘2019-01-01’, INTERVAL 7 HOUR)

我正在使用sql和bigquery,但语法不正确。你知道吗?

yduiuuwa

yduiuuwa1#

第二个手放下。
第一个患有“左手操作者表情”综合征。列上的表达式无法使用索引。

mitkmikd

mitkmikd2#

第二个查询将比第一个查询快。
原因:如果对索引列执行强制转换或某些操作,导致查询作为简单查询运行,则不会使用索引。但在第二个查询中,索引是完整的,只对输入进行操作,这样就可以直接使用范围索引来更快地执行搜索。
你可以从这里找到一个很好的解释

k2fxgqgv

k2fxgqgv3#

假设表上有索引 registration_timestamp ,则该索引很可能只能在第二个版本中使用,即sargable。第一个版本 registration_timestamp 出现在函数调用内部时,通常无法使用索引。所以,你通常应该坚持第二个版本。

相关问题