有表A和表B,两者表结构完全相同,且都没有任何索引。表A中有20多万条记录,表B中有8万多条记录,现在分别对这两个表进行查询,查询条件完成相同。出现的结果是查询表B的时间比查询表A的时间长。理论应该是查询表B的时间比查询A的时间短。
不知道为什么会出现与理论完全相反的结果。请各位高手指教!

解决方案 »

  1.   

    最后查询出的结果一样吗?如果不一样的话:
    可能记录值不一样,也影响查询速度
    比如你查询条件中:
    where 条件1,条件2,f1>10
    如果A表中f1>10的记录比较少,而B表中的比较多,则很可能查询B表需要的时间更长最好能把语句贴出来看看
      

  2.   

    我现在把问题详细讲一下:
    最初我对表A进行查询,查询语句为:
    SELECT A.* FROM A WHERE A.RECEIVER = '60269' AND (A.FLAG = '0')
    这时查询速度比较慢.如果把查询条件中 AND (A.FLAG = '0') 去掉,查询速度就快了.
    于是我新建了一张表B,建表语句为:
    CREATE TABLE B AS SELECT A.* FROM A WHERE A.FLAG = '0'.
    这时我对表B进行查询,查询语句为:
    SELECT B.* FROM B WHERE A.RECEIVER = '60269'
    按我的理解是查询速度应该比 SELECT A.* FROM A WHERE A.RECEIVER = '60269'
    查询速度速度快,结果却相反.
      

  3.   

    A表对RECEIVER字段建有索引,而B没有
      

  4.   

    A表最初是在RECEIVER上有索引的,但是由于往A表中一次性插入多条记录时速度太慢,耗时太长,所以把索引去掉了.
      

  5.   

    谢谢各位。问题已经解决。我在表B的RECEIVER字段上加了个索引,查询速度就很快了。但是我所描述问题的出现的原因还是有点不太清楚。
      

  6.   

    看你贴出来的内容. 看到原来的那个Table上是有个主键的. 
    主键就有索引嘛. 
    而你用CREATE TABLE B AS SELECT A.* FROM A WHERE A.FLAG = '0'. 
    这样的语句 建立 出来的table是没有主键. 也没有索引的. 
    当然查表B会慢一些了. 
      

  7.   

    测试时,除了索引有时候SQL的缓冲对速度也有影响。
    最好能看到分析计划。