Sql 过滤日期+;今天的时间戳

Sql 过滤日期+;今天的时间戳,sql,oracle,indexing,Sql,Oracle,Indexing,当从今天开始对行进行筛选时,如果我希望Oracle使用索引,我将避免使用truncate函数。我会写 trade_date >= trunc(sysdate) and trade_date < trunc(sysdate+1) 但后者更具可读性 是否有一个技巧可以提高可读性并仍然使用索引?我正在寻找一个通用的解决方案,用于几个SQL(因此没有基于函数的索引)首先,如果您想要更好的性能,没有什么比更可读的了。任何中间开发人员都会以类似的方式阅读这两种内容。所以,忘掉可读性吧 最好的方

当从今天开始对行进行筛选时,如果我希望Oracle使用索引,我将避免使用truncate函数。我会写

trade_date >= trunc(sysdate) and trade_date < trunc(sysdate+1)
但后者更具可读性


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

首先,如果您想要更好的性能,没有什么比
更可读的了。任何中间开发人员都会以类似的方式阅读这两种内容。所以,忘掉可读性吧

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

我试着使用我的一个有几百万条记录的表,并将两者进行了比较。尽管两者的成本几乎相同,
trunc(trade_-date)=trunc(sysdate)
在不同连接的多列上进行多次试验后,在trunc(sysdate)和trunc(sysdate+1)
之间的性能优于
trade_-date


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

取决于你如何定义可读性-第一个对我来说很好,但也许我已经做了太久了。。。用“今天”和“明天”的变量来隐藏真相和加法,什么能让它更好呢?还是你希望使用平等?或者你还有别的想法吗?我担心特别是交易日期trade_-date
,或者甚至只是
trade_-date=sysdate
,对于不知道trunc选项为何错误的人来说,这两种情况看起来都是合理的;但它们根本不一样。除了添加注释来说明为什么要这样做之外,您实际上不想在整个代码中都这样做,对此您真的无能为力。希望代码审查能抓住它?您可以添加一个只包含日期的额外列,并将当前列重命名为trade_datetime或其他名称。尽管我所能想到的任何东西都可能(而且将来)被无知的开发人员滥用。首要任务是点击索引,其次我希望它可读。为什么要投反对票?我用几百万条记录比较了这两种情况,以比较这两种情况的性能,并得出
trunc(trade_-date)=trunc(sysdate)
where
条件下使用时更好。你还以为你会否决它吗?好吧,也许我误解了你。但是,您似乎在测试这两个场景,而没有索引。如果第一个命中索引,而第二个没有命中索引,应该会有很大的不同。我没有检查索引的场景。我在
where
子句中对它们进行了几百万行的比较,以比较哪一行更有效。好的,问题是仍然要用可读的查询命中索引。
trunc(trade_date) = trunc(sysdate)