创建一个这样的索引试试
create index idx_name tbname(SubStr(UserNumber,3,1));

解决方案 »

  1.   

    在数据更新时,可能是新增时
    把SubStr(UserNumber,3,1),先生成保存在一个字段中
    可能速度会有所提高
      

  2.   

    建议表建立在2个分区上,数据插入时把SubStr(UserNumber,3,1)为('5','6','7','8','9'))的数据存储在一个分区(partion yidong),其他的存储在另外一个分区(partion liantong)。这样统计会快很多。
      

  3.   

    谢谢楼上各位了,除了数据库本身的调整,SQL上有没有什么优化?我非常同意beckhambobo(beckham) 的意见,分表是肯定的,只是现在用户量不会太大,所以不想把系统搞得很复杂。
      

  4.   

    条件有了,还要看一下泥提取的内容是怎样的?单从泥的条件语句来看,可以用DECODE来对移动和联通用户进行区分,通过减少对数据库的访问次数,从而使条件进行优化,不过还不大清楚泥提取的内容是否利用了汇总函数?
      

  5.   

    简单来说,把移动数据列为一分区,联通数据分为一区。
    局部采用细分区(散列、范围等)
    详情参考:
    http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96524/c12parti.htm#464767
      

  6.   

    条件可以这样写:
    联通的 where UserNumber between '13000000000' and '13399999999';
    移动的 where UserNumber between '13500000000' and '13999999999';
    where条件中对字段最好别用函数像你上面的SubStr(UserNumber,3,1)对字段用函数处理的话,你对这个字段健的索引就起不到作用了