我用的是Oracle.
现有一表:table1, 其中有name (定义为varchar2(68)) 字段,
table1中只不过是30000条记录,然而,
Create index tmp_nameLen_idx table1 on (length(name));
需要很久时间 > 20 min.
请问,这是怎么回事呢?
怎样解决?

解决方案 »

  1.   

    > 20 min.的原因不好说,但你建length(name)这样的函数索引有意义吗?
      

  2.   

    虽然对30000条记录的表建这样的索引没有太大的意义,
    但是我不知道为什么要这么长的时间,
    现在我用下面的语句试了一下,
    select * from table1 order by name
    数据库居然让我等了好长的时间也没有结果,是不是数据库坏了啊?
      

  3.   

    如果你的数据库是测试用的,试试这样:
    SQL> alter table table1 move;另外索引是的目的是加快搜索,你建成这样的函数型是没意义的,这个索引的结束是一些长度,无法起到索引的作用
      

  4.   

    那请问:
    select * from table1 order by name 
    数据库居然让我等了好长的时间也没有结果,是不是数据库坏了啊?
      

  5.   

    我写的SQL 是这样的,请您看看:
    select * from table1 where nvl(length(name), 0) < 20 order by name
      

  6.   


    utpcb:
    请问Mark表是干什么的?
    “MARK 表整理一下看看 ”
     
      

  7.   

    看看你系统在等待什么 v$session_wait
      

  8.   

    我看不出什么,只知道你这个SQL加上你的索引,效率好不到哪,看看执行计划吧