我用的是oracle8i数据库,一个简单例子:表tab,字段lst_tx_date,索引:lst_tx_date唯一索引,
请问在使用时用到select * from tab where to_char(lst_tx_date,'yyyy')='2003',这条sql语句会用到唯一索引吗?
是不是一定要用函数索引才行呢?要给该表建立函数索引,该怎样写呢?如果用to_char(lst_tx_date,'yyyymmdd')='20030702' 同样会用到函数索引吗?
请高手多多指教。

解决方案 »

  1.   

    1、to_char(lst_tx_date,'yyyy')='2003',不会使用到索引
    2、建议函数索引,需要oracle8.1.6企业版以上才有这个功能,语法:
      create index ind_name on table(to_char(lst_tx_date,'yyyy'));
    3、to_char(lst_tx_date,'yyyymmdd')='20030702' 不会使用索引,
       建议改为:
       lst_tx_date=to_date('20030702', 'yyyymmdd')
      

  2.   

    普通index不能被用到在你的例子中.
    你需要建立function based index
    --->CREATE INDEX lst_tx_date
    ON tab(to_char(lst_tx_date,'yyyy')) ;
      

  3.   

    请问: Michaelyfj(星星还是那颗星星)
    3、to_char(lst_tx_date,'yyyymmdd')='20030702' 不会使用索引,
       建议改为:
       lst_tx_date=to_date('20030702', 'yyyymmdd')为什么要写成这样呢?
    我还希望用到‘yyyymmddhh24:mi:ss'呢?请问: black_snail(●龙飞虎○) 
    to_char(lst_tx_date,'yyyymmddhh24:mi:ss')的索引后,to_char(lst_tx_date,'yyyy')会用到前面的那个索引吗? 
      

  4.   

    lst_tx_date=to_date('20030702', 'yyyymmdd')
    这样不太精确,还是使用函数索引请问: black_snail(●龙飞虎○) 
    to_char(lst_tx_date,'yyyymmddhh24:mi:ss')的索引后,to_char(lst_tx_date,'yyyy')会用到前面的那个索引吗? 答案:不会只能再建to_char(lst_tx_date,'yyyy')函数索引