问题描述:我有一张200W条记录的表,查询数据很慢。然后我删除了大部分数据,就保留几十条数据。 可查询数据还是很慢, 为什么会这样? 几十条数据,一个 select count(*) from tablename  都要1秒多的时间。。新接触oracle ,望好心人指点。。

解决方案 »

  1.   

    保留10几条还慢的话,把表的hwm降下来才行。可以重建表,
      

  2.   

    select count(1) from table_a 慢,不代表选择单条记录都慢
      

  3.   

    实际上,单条查询也是慢。
    我目前方法很死,就是先把这几十条数据保存到临时表中,再truncate 这个表,再临时表数据插回来。这样做的可以解决查询速度问题。可我就是想知道,为什么会这样的,有没有更好的解决方法
      

  4.   


    了解一下hwm方面的知识, 如果单条还慢,应该是没有index的问题了。
      

  5.   


    1. 为什么你这里只有10几条数据,却查询count很慢
    了解一下hwm方面的知识2. 为什么选单个的也慢
    如果单条还慢,应该是没有index的问题了。根据你的查询条件,加上相应的index
      

  6.   

    高水位线问题,可参考文章:http://www.diybl.com/course/7_databases/oracle/2007114/84243.html
      

  7.   

    set autotrace on explain
    select .. from ..;
    查看执行计划,优化之.
    如果安装有 em,直接使用 sql tuning advisor+sql access advisor 优化之
      

  8.   

    细看LZ的问题,
    把表move 一下,再rebuild index 即可解决问题哈.
      

  9.   

    由于delete数据一般都不会释放空间,你可以查查该表占的空间还是很大,就算只有10条数据速度很慢都算正常的。这种情况下被删除的表数据还可以通过flahback找回来。
    如果是truncate这种ddl操作,空间就释放了。
      

  10.   

    创建索引了吗、
      不要使用select *from 这样执行的速度是最慢最底下的的这样数据全扫描啊!  如果一个表中20个字段你创建15个索引 不必考虑查询的速度一定特慢
      
      你使用的是oracle数据库吗? 几十条数据需要那么长时间?
      
      是不是,你的电脑CPU爆满啦!