现在在做一个GPS项目 oralce中记录一个表 现在历史记录有3亿多条记录
我给这个表加了按日期的索引
但是查询的时候响应速度极慢查询sql语句 select * from GPS_INFO_HISTORY WHERE dt >= to_date('2011-08-07 08:00:00' , 'yyyy-mm-dd HH24-mi-ss') and  dt <= to_date('2011-08-07 09:00:00' , 'yyyy-mm-dd HH24-mi-ss') and IMEI = '3030303032363038'
结果是2000多条 但是响应时间超过了7分钟请教如何让优化

解决方案 »

  1.   

    表有分区吗?IMEI建索引了吗?没有的话建一个试一下
      

  2.   

    用dt建立索引。
    或者建表分区 。以dt建。
      

  3.   

    大表分区是很有必要的,另外,个人觉得对于日期、时间还是用字符串进行存储较好,查询的时候用绑定变量处理,绑定变量在程序中处理好,不要在SQL中处理(即:不要在WHERE中用过多的函数)。
      

  4.   

    1、表的设计方面,看看分区情况,如果分区的话加上partition分区查询。
    2、索引
    3、语句优化。像你这个语句,把查询条件换个位置试试(能够大批量过滤数据的条件放到最后),不过效果可能不会很明显。
      

  5.   

    range(时间)分区 create index ...local 建本地索引,分析sql执行计划,在做优化
      

  6.   

    能把执行计划贴出来么?
    把IMEI也加上索引试试,或者干脆用时间和IMEI的联合索引
      

  7.   

    to_date已经破坏了表的索引了。。跟没有索引的效果是一样的