zoukankan      html  css  js  c++  java
  • 什么叫即席查询

    什么叫即席查询

    这个仅当是笔记

    以前一直不知道什么叫即席查询,今天重新看了一遍《SQLSERVER企业级管理平台》,才明白什么叫“即席查询”

    下面这句话是我个人总结的:

    什么叫即席查询
    AD-HOC :以单独的SQL语句的形式执行的查询就是即席查询,比如说:在C#程序里嵌入的SQL语句,或者在SSMS里的新建查询窗口

    自己键入的SQL代码就是即席查询。

    而将SQL代码放入存储过程里面,以存储过程或者函数或者触发器来执行的查询就不是即席查询,即席:当场,就是当场去查询,当然,这个当场不是当场写代码的意思啦

    -------------------------------------------华丽的分割线---------------------------------------------------------

    那么,即席查询是不是没有执行计划的缓存的呢?

    在《SQLSERVER企业级管理平台》里是这样说的

    adhoc:即席查询

    Adhoc语句
    一组包含select,insert,update,delete的批处理指令。对这样的指令,只有前后完全一致
    包括字母的大小写,空格,回车换行都一致,SQL才认为是两条一样的语句,才能够重用执行计划。所以这个要求还是挺高的

    1 --例如,运行下面的指令,连续两次查询sys.[syscacheobjects]视图
    2 DBCC freeproccache
    3 GO
    4 SELECT * FROM sys.[syscacheobjects]
    5 go
    6 SELECT * FROM [sys].[syscacheobjects]
    7 go

    在第二个结果集里会看到两个adhoc的执行计划。他们的差别就在于一个有回车一个没有回车

    但是如果语句是一样的,那么第二句话就可能会重用前面的执行计划。所以adhoc语句并不一定没有执行计划的重用

    1 --例如下面,把同样的一句话跑两遍,会发现只有一个执行计划,而且他被使用过两次
    2 --(字段usecount=2)
    3 
    4 DBCC freeproccache
    5 GO
    6 SELECT  * FROM sys.[syscacheobjects]
    7 go
    8 SELECT * FROM sys.[syscacheobjects]
    9 go

    SQL2005以后,可以在单个数据库上开启强制参数化。也就是说,对于在这个数据库下运行的大部分语句,

    SQL都会先参数化,再运行。如果应用经常用adhoc方式调用一样的语句,强制参数化可能会有所帮助

     ----------------------------------------------华丽的分割线------------------------------------------------------------------------

     那么分布式查询会不会重用执行计划呢?

    我使用下面代码测试了一下

     1 --第一次执行的时候,先清空执行计划缓存,第二次执行就要把DBCC freeproccache注释掉
     2 DBCC freeproccache
     3 GO
     4 
     5 
     6 SELECT * FROM 
     7 OPENROWSET('microsoft.jet.oledb.4.0','C:\Users\Administrator\Desktop\Course.mdb';'admin';'',Course_baseinfo) 
     8 GO
     9 
    10 SELECT [cacheobjtype],[objtype],[dbid],[usecounts],[sql]  FROM sys.[syscacheobjects]
    11 WHERE [dbid]=1
    12 go

    根据usecounts字段,每执行一次都会递增,说明是有重用执行计划的

    附上测试用的mdb文件,记得使用分布式查询的时候需要安装office的哦,如果是64位操作系统,需要安装64位 Microsoft.ACE.OLEDB.12.0

    http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/58c4c61e-fa86-4809-bf7d-21bacb055d3e

    文件地址:https://files.cnblogs.com/lyhabc/Course.rar

     如果有不对的地方,欢迎大家拍砖o(∩_∩)o

  • 相关阅读:
    从zk监控canal-client消费延迟情况
    python面向对象——类的参数
    python面向对象——类的继承
    python并发——进程间同步和通信(二)
    python并发——线程池与进程池(转)
    python从指定目录排除部分子目录——用于删除目录
    python并发统计s3目录大小
    Java对象的序列化和反序列化
    多态、抽象类和接口
    Java输入输出流
  • 原文地址:https://www.cnblogs.com/lyhabc/p/3138896.html
Copyright © 2011-2022 走看看