从今天开始对行进行过滤,如果我希望Oracle使用索引,我会避免截断函数。我会写
trade_date >= trunc(sysdate) and trade_date < trunc(sysdate+1)
而不是
trunc(trade_date) = trunc(sysdate)
但后者更具可读性。
是否有提高可读性并仍然使用索引的技巧?我正在寻找一个在几个SQL中使用的通用解决方案(所以没有基于函数的索引)
答案 0 :(得分:-1)
首先,如果你想要更好的表现,就没有任何名为more readable
的东西。任何中间开发人员都会以类似的方式阅读。所以忘记可读性。
最好的方法是创建2个类似的表并放置几千条记录,并使用两种方法来比较成本。
我尝试使用我的一张表,其中有几百万条记录,并对两者进行了比较。虽然两者的成本几乎相同,但trunc(trade_date) = trunc(sysdate)
在不同连接的多个列上进行多次试验时的效果优于trade_date BETWEEN trunc(sysdate) and trunc(sysdate+1)
。
所以我建议使用第二种索引方法。虽然我没有为它们创建索引,但您可以尝试自己检查。