请问各位高人,有时候建了索引怎么速度更加慢?表结构:t1(user_mobile,trans_date,trans_counts)
select user_mobile From t1  Where trans_date<'20071101' And trans_date>'20070930'
Group By USER_MOBILE Having Sum(trans_counts)>6;表t1中有4000万的数据,该语句执行速度非常慢,现已建user_mobile和user_mobile,trans_date的索引,请问如何建索引如何优化?

解决方案 »

  1.   

    非常非常重要的一点原则:使用正确的数据类型存储数据,这样能获得更高的性能,更关键的能够获得数据的完整性。此处trans_date使用date类型进行存储,然后在trans_date上做索引能大大提高效率。如果还不能满足要求,那么看看是否可以在trans_date上进行分区。另外记得对传入的两个变量使用绑定变量。
      

  2.   

    现已建user_mobile和user_mobile,trans_date的索引
    ------------------
    第一建索引的列最好 不重复数据行/所有数据行 比接近于1
    二,不知道你user_mobile,trans_date这个是不是说的组合索引的意思,如果是的话,在不用user_mobile的情况下,这个组合索引是不会用到的。
    三,参考以上两点和二楼的
      

  3.   

    建一个trans_date的索引会好些吧,试一试!
      

  4.   

    看一下表的statistics数据是不是和表中实际的行数相差太远,如果是,对表做analyze。
      

  5.   

    请楼主帖下执行计划explain plan for
    select   user_mobile   From   t1     Where   trans_date < '20071101 '   And   trans_date> '20070930 ' 
    Group   By   USER_MOBILE   Having   Sum(trans_counts)> 6; 
    @?/rdbms/admin/utlxplp
      

  6.   

    你这个表可以考虑trans_date按月做分区。
      

  7.   

    你最好执行一下分析计划,如果只看上面的SQL语句个人认为只给trans_date 加索引就可以了.