繁体   English   中英

今日过滤日期和时间戳时可读的SQL查询

[英]Readable SQL queries when filtering date + time stamp on today

从今天开始过滤行时,如果我希望Oracle使用索引,则应避免使用truncate函数。 我会写

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

代替

trunc(trade_date) = trunc(sysdate)

但是后者更具可读性。

是否有技巧来提高可读性并仍使用索引? 我正在寻找要在多个SQL中使用的通用解决方案(因此,没有基于函数的索引)

首先,如果您想获得更好的性能,没有什么比所谓的more readable更高了。 任何中间开发人员都将以相似的方式阅读两者。 因此,请忽略可读性。

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

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

所以我也建议第二种索引方法。 尽管我没有在它们上创建索引,但是您可以尝试自己检查一下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM