none
sqlserver查询分析器问题 RRS feed

  • 问题

  • 在查询分析器中,同一条sql语句连续执行2次,效率一样么?

    我发现好像不太一样呀。比如我的sql语句 

     select count(*) from table  第一次要4秒

    第二次1秒就查出来了。我新开一个窗口,任然很快。好像有缓存一样?

    2010年5月5日 22:22

答案

  • 在查询分析器中,同一条sql语句连续执行2次,效率一样么?

    我发现好像不太一样呀。比如我的sql语句 

     select count(*) from table  第一次要4秒

    第二次1秒就查出来了。我新开一个窗口,任然很快。好像有缓存一样?

    Optimizer takes time to generate execution plan and sql may need read related data from disk when run the query first time. Second run will be faster if execution plan and data are still in cache.
    2010年5月6日 3:11

全部回复

  • SQL中存在高速缓存,所以会存在你说的问题。
    No pain no gain
    2010年5月6日 0:21
  • 你可以通过设置显示统计信息(set statistics io on)来查看

    往往第一次有物理读,后面就都是逻辑读了,第一次可能慢些。

     


    family as water
    2010年5月6日 1:20
  • 在查询分析器中,同一条sql语句连续执行2次,效率一样么?

    我发现好像不太一样呀。比如我的sql语句 

     select count(*) from table  第一次要4秒

    第二次1秒就查出来了。我新开一个窗口,任然很快。好像有缓存一样?

    Optimizer takes time to generate execution plan and sql may need read related data from disk when run the query first time. Second run will be faster if execution plan and data are still in cache.
    2010年5月6日 3:11
  • 执行一次后, 执行计划和数据都有被缓存到内存, 所以第二次不再有分析和编译执行计划及从磁盘加载数据的这个操作, 自然快很多.

    如果你保持连接不断, 等几分钟去查, 则一般又会比较慢, 这是因为缓存的东西没有被再次使用, 缓存的信息释放以被其他处理使用

    2010年5月6日 4:06
  • 缓存机制是 SQL SERVER 为了提高性能而设计的, 跟是否使用查询分析器(或者其他客户端)没有关系
    2010年5月6日 4:08
  • 第一次执行:select count(*) from table 

    然后执行 DBCC   FREEPROCCACHE 

    再次执行:select count(*) from table 

    这样的时间应该一样,不过执行这个命令要小心 会清楚缓存中所有的内容

    2010年5月6日 11:57