数据库中存在300W条数据运行以下SQL语句Select top 10000 aid,[a1].addtime,[a1].hits From [eit_InfoGroup][a1] left join [eit_Custom_Article][a2] on [a1].[id]=[a2].[aid] inner join [eit_Class][a3] on [a1].[classid]=[a3].id Where ClassID in(30)  order by [a1].addtime desc
Select top 10000 aid,[a1].addtime From [eit_InfoGroup][a1] left join [eit_Custom_Article][a2] on [a1].[id]=[a2].[aid] inner join [eit_Class][a3] on [a1].[classid]=[a3].id Where ClassID in(30)  order by [a1].addtime desc第一条SQL语句运行需要 5-8秒时间 只是多了个 [a1].hits第二条语句运行只需要0秒就显示出来了大家能帮忙说说为什么吗? 好郁闷

解决方案 »

  1.   

    看執行計劃
    set showplan_text on
    看看哪些是通過表掃描,哪些是索引~~
      

  2.   

    [a1].hits 只是a1的一个字段显示的字段多了个,当然用得时间长一点
      

  3.   

    检查一下执行计划这个是有可能的, 比如第二个查询需要的所有列都在某个索引中, 这样只需要扫描索引就出结果了, 而如果 a1.hits 恰好不在索引, 那就要多做一次表扫描的操作, 这样速度有有差异了(表越大, 差异越大)
      

  4.   

    a1.hits上没有建索引,导致表扫描。
    而aid,addtime应该都有索引,不会有表扫描,所以速度快得多。
    你可以再加一列没有索引的列一起查出来,速度应该和只有hits这列差不多。
      

  5.   

    [a1].hits 不包含在索引中所以可能没有