在今天过滤日期+时间戳时可读的SQL查询

时间:2016-06-03 11:22:57

标签: sql oracle indexing

从今天开始对行进行过滤,如果我希望Oracle使用索引,我会避免截断函数。我会写

trade_date >= trunc(sysdate) and trade_date < trunc(sysdate+1)

而不是

trunc(trade_date) = trunc(sysdate)

但后者更具可读性。

是否有提高可读性并仍然使用索引的技巧?我正在寻找一个在几个SQL中使用的通用解决方案(所以没有基于函数的索引)

1 个答案:

答案 0 :(得分:-1)

首先,如果你想要更好的表现,就没有任何名为more readable的东西。任何中间开发人员都会以类似的方式阅读。所以忘记可读性。

最好的方法是创建2个类似的表并放置几千条记录,并使用两种方法来比较成本。

我尝试使用我的一张表,其中有几百万条记录,并对两者进行了比较。虽然两者的成本几乎相同,但trunc(trade_date) = trunc(sysdate)在不同连接的多个列上进行多次试验时的效果优于trade_date BETWEEN trunc(sysdate) and trunc(sysdate+1)

所以我建议使用第二种索引方法。虽然我没有为它们创建索引,但您可以尝试自己检查。