我有一个分页的存储过程
如果长时间没有去点击查询的话再点击就要4秒
但是点多以后他都可以用1秒来查询这是怎么回事呢?
如果是因为SQL对这条查询语句优化了性能的话
能不能让他一直优化这一条呢谢谢

解决方案 »

  1.   

    第一次或者是长时间不用的时候,SQL Server会自动将这条语句踢出缓存,下次再使用的时候,SQL Server要重新编译后读入缓存,所以消耗的时间要长一点.
    而连续的点击的话,直接读取缓存里面解析后的,所以时间上会比较短也比较快!
      

  2.   

    那有没有办法让SQL自动经常性的缓存表里面的解析呢因为现在就是因为开始点的时候太慢了 客户整天有意见
      

  3.   

    这个机制好像是SQL Server内部完成的,
    不知道怎么自动写入缓存.
      

  4.   

    应该是1楼说的,与windows的内存管理的道理相同,第一次打开一耗内存的程序,时间会较长,硬盘不停闪动,关闭程序,再打开,就不用那么长时间.
      

  5.   

    你是用通用的分页存储过程吧,这种动态的,就算写成存储过程,很多情况下仍然要编译,所以我一般是不用通用分页的存储过程。另:2005的分页用row_number()应该比select top快,毕竟不需要left join。
      

  6.   


    现在是SQL读入缓存,那能不能让这个缓存的时间廷长呢
    比如本来1分种,现在我改为60分秒
    还有这个缓存会在什么时候改变,比如在要查询的表数据改变时,查询是不是又变为4秒
    谢谢
      

  7.   

    缓存是SQL动态管理的,当缓存不够,SQL会牺牲一些不常用的执行计划,甚至缓存够的情况下,也会清除一些长时间没用的执行计划,好像不提供可控的接口。
      

  8.   

    第一次执行的时候需要建立新的连接,是比较耗时的一个过程,第二次以后会直接使用现有的连接速度就回快的多了
    另外还有缓存队列,SQL在第一次执行的时候会先添入到缓存里执行队列中先进行编译,第二次以后会到先判断是否在队列中如果在就不编译直接运行,否则就先编译在执行