项目中如果一张表中数据量比较大比如50万条记录,select语句where带索引和不带索引的速度差距很大吗?到底多大?
以一台普通配置机器执行这样一条select 语句大约需要多少耗时?如果耗时比较大是否有比较好的方法降低耗时?请高手们教教我,谢谢!

解决方案 »

  1.   

    耗时和很多因素有关
    除了索引配置等等还有语句
    如果你要查询出来的结果是原表记录数的小部分
    使用索引效果明显
    cbo会决定是否使用索引
      

  2.   

    select语句where带索引和不带索引的速度差距很大吗?到底多大?这个主要要看你检索数据量的大小, 以及索引类型是否正确。比如你检索数据超过表总数量一半或者1/10 (这个比例一般是说2%)走索引 估计会比不走索引慢,但是这也是不一定。所以实际情况来看待问题更合适。以一台普通配置机器执行这样一条select 语句大约需要多少耗时?如果耗时比较大是否有比较好的方法降低耗时? 这个更难加以数量说明了,最好的办法是自己测试一下,加之对相关的理论了解并和你所见的情况结合起来。
      

  3.   

    项目中如果一张表中数据量比较大比如50万条记录,select语句where带索引和不带索引的速度差距很大吗?到底多大? 
    差别很大,3-5倍是很正常的。但与实际数据量大小有关,还有与机器性能等有关
    以一台普通配置机器执行这样一条select 语句大约需要多少耗时?如果耗时比较大是否有比较好的方法降低耗时?请高手们教教我,谢谢!
    是否可以优化sql语句?或者用存储过程代替
      

  4.   

    感谢楼上几位慷慨发言,是否有人使用一些方法,比如把数据库数据记录到内存中,然后维护内存数据库一致性,这样select的时候速度是否会快很多。
    还有就是今天碰到一个问题ORA-24337: statement handle not prepared
    有谁知道产生这个问题的原因?
      

  5.   

    select /*+ordered use_hash(tablealis) */
      

  6.   

    ORA-24337: statement handle not prepared产生这个问题的原因已经找到,是因为一个字段是乱码,我把乱码改成""就没有出现过这个问题,但是之前的多条记录都有乱码,没有报错,就一条报错不懂为什么。
      

  7.   


    项目中如果一张表中数据量比较大比如50万条记录,select语句where带索引和不带索引的速度差距很大吗?到底多大? 
    一般来说,对索引的扫描要快于fts,相差多大,就不是很好估计了,有的相差不大,有的相差很大。和数据量,存储结构,等因素有关。
    以一台普通配置机器执行这样一条select 语句大约需要多少耗时?如果耗时比较大是否有比较好的方法降低耗时?请高手们教教我,谢谢!
    这个就不好说了,数据量小就快,数据量大,没有index,内存配置不合理都可能导致很慢,一般的优化select的方法就是建立索引。或者根据本身的执行计划来优化语句。