none
DateTime类型比较效率低下的问题 RRS feed

  • 问题

  • 有一段这样的SQL

    WITH VUNIT as (

    通过递归调用查询数据

    (大概两万条数据)

    )

    select count(*) from TableA

    where EXISTS (

    select VUNIT.iUnidId

    from VUNIT

    where 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 *执行得快才对呀?

    希望高人指点


    xiaohe.feng
    2011年8月14日 12:17

全部回复

  • 能够看看这2个sql 的查询计划么?

     

    exists的效率是比较低,是否可以使用 左连接等方式来代替呢?

     

    将 '2011/08/15' 改为 convert (datetime,'2011/08/15') 可以提高效率,不过这个不明显。


    family as water
    2011年8月15日 1:16
  • Could you please copy exec plan both of count(*) and select *
    2011年8月15日 1:18