我用jdbc连接数据库进行相同的查询在使用Management执行任何查询前后速度相差将近10倍
我的sql包含row_number()over(),貌似不包含此子句的sql不存在上述问题,请问为何?

解决方案 »

  1.   

    没人能回答么?缓存问题的话应该不会随SSMS的关闭而关闭吧?为什么我关掉它速度又变慢了呢?
    ps:我的ssms是2008的,而且这个问题在2008上面没有出现过,05的另一个数据量较小的库也没有此问题
      

  2.   

    你用osql来执行会有差异吗?那个不受ssms的影响,可以用来测试你的想法
      

  3.   

    无论ssms是否开启osql执行结果:时钟时间(毫秒): 总计值        13  平均值        13 (每秒 76.92 个事务)
    执行了几次,最慢17,最快11当ssms开启时:
    ssms客户端运行计划显示2-4毫秒
    jdbc执行结果在2-4毫秒,这个结果是在ssms开启后执行过一条语句后当ssms未开启时:
    jdbc致信结果在80毫秒以上,这个结果是关闭ssms后立刻执行即出现
      

  4.   

    执行了:DBCC FREEPROCCACHE
    之后试试。如果还是那样的话,就不是缓存问题了
      

  5.   

    在DBCC FREEPROCCACHE执行前后没有变化
    但我将我的操作分解后发现只有在打开一个选定数据库为我要查询的数据库时速度就会变快,例如:打开ssms后只新建一个数据库引擎查询窗口,默认选定master库,至此jdbc查询速度都很慢,当选则我要查的数据库后jdbc查询速度立刻变快了,再选择master则又变慢了。
    至此似乎找到问题了,我原来的sql语句所有字段都写成[db].[owner].[object].[column],所以一般不用use db,根据以上现象,我把语句改为use db select column from object后查询速度恢复正常
    08上没有这个问题,难道05必须先选定数据库才可以使用查询缓存?
      

  6.   

    一般建议如果可以,最好还是写成[db].[owner].[object].[column],这样更快定位
      

  7.   

    可我的问题正是因为写成这样才造成查询速度变慢....use db select column from object这样反而很快,这是为什么呢?
      

  8.   

    use的话已经把会话限定在那个库里面了,如果你的程序只在一个库执行,那把库名去掉,用use的确好一点。但是我也没想出来为什么一个小小的改动会有那么大的差别