Linux平台,Oracle 11g R2
数据量在千万级别
当select一条数据时,当有数据匹配时,速度很快;
当select一条数据库中没有匹配的数据时,速度很慢,语句过很久才执行完毕。这到底是哪里出问题了?应在哪里优化,求助ing...

解决方案 »

  1.   

    千万级别的sql语句,只查询一条,肯定要走索引,否则查询会很慢
      

  2.   

    不存在锁定,在系统只有一个用户的情况下,也如此。
    SQL语句也极其简单:select * from test where account like '882345%';
    如果有的话,语句结束很快,马上出结果。如果没有会很慢。
    索引也已经建了。
      

  3.   

    select不会被阻塞。分别看看两次的执行计划。
      

  4.   

    1、你的认识有问题,匹配上了和没匹配 数据库都会去比较数据,不比较怎么不能判断匹不匹配。
    2、因为看不到你的sql给你举个简单的例子:
       假设在column_name上有索引。
       select * from table_name where column_name = 'xxxx';
       这个语句一般会用到索引(某些特殊情况下,oracle优化器会放弃索引),这样查询的速度很快,扫描几次就能找到目标。
       select * from table_name where column_name != 'yyyy';(数据库中没有这样的数据,注意你的数据量是1千万)
       这个时候因为是(not=),所以数据库要全表扫描所有数据来判断到底是不是有数据满足!= 'yyyy',1千万扫描速度可想而知。3、你可以想一下,如果我想知道身份证号码为:1234567890 的人原籍在哪是不是很好找。
       如果我找一下身份证号码不是1234567890 的人呢,我是不是得把全国的人都找一边才能确定,漏掉一个都不行,因为很有可能你漏掉的那个人身份证的恰恰就是1234567890。例子可能不太恰当,体会意思就可以了。
      

  5.   

    强制使用索引看看:
    /*+ index(test ,account上的索引名) */