有一段这样的SQLWITH VUNIT as (通过递归调用查询数据(大概两万条数据))select count(*) from TableAwhere EXISTS (select VUNIT.iUnidIdfrom VUNITwhere VUNIT.vcUnitLevel = TableA.vcUnitLevel)and TableA.dtStartDate <= '2011/08/15' and TableA.dtEndDate >= '2011/08/21'不好意思,开发环境里的代码和数据不能带出来,靠回忆只能写成这样了。其中,dtStartDate和dtEndDate都是datetime类型的数据,TableA的数据有两万多条,符合检索条件的才42条,但耗时半个小时都不能执行完如果把select count(*) 改成select *, 或者用DateDiff函数运行,只要一秒钟。这是什么问题?我觉得select count(*) 比select *执行得快才对呀?希望高人指点

解决方案 »

  1.   

    TableA.dtStartDate <= '2011/08/15' and TableA.dtEndDate >= '2011/08/21'
    --你能取的到值嘛?
      

  2.   

    EXISTS在较大数据量下不一定就效率高
      

  3.   

    select count(*) 是要聚合计算的select * 只是查询
      

  4.   

    补充一点,dtStartDate是复合主键