小编cog*_*oft的帖子

SQL Server中的参数嗅探(或欺骗)

不久之前,我有一个查询,我为我的一个用户运行了很多.它仍然在进化和调整,但最终它稳定并且运行得非常快,所以我们从中创建了一个存储过程.

到目前为止,这是正常的.

但是,存储过程很慢.查询和proc之间没有实质性差异,但速度变化很大.

[后台,我们正在运行SQL Server 2005.]

友好的本地DBA(不再在这里工作)看了一下存储过程并说"参数欺骗!" (编辑:虽然它似乎也可能被称为'参数嗅探',这可能解释了当我试图搜索它时谷歌的点击率很低.)

我们将一些存储过程抽象到第二个存储过程,将对这个新内部过程的调用包装到预先存在的外部过程中,称为外层过程,嘿,它与原始查询一样快.

那么,是什么给出的?有人可以解释参数欺骗吗?

奖金积分

  • 强调如何避免它
  • 建议如何识别可能的原因
  • 讨论替代策略,例如统计数据,指数,关键,以减轻这种情况

t-sql sql-server sql-server-2005 parameter-spoofing

63
推荐指数
5
解决办法
3万
查看次数

使用SQL UPDATE语句将数据从一个表复制到另一个表

UPDATE table2 
SET table2.col1 = table1.col1, 
table2.col2 = table1.col2,
    table2.col3 = table2.col3,
...
FROM table1, table2 
WHERE table1.memberid = table2.memberid
Run Code Online (Sandbox Code Playgroud)

请帮助我了解如何在有9-10行时使用SET子句,并使用公共列名SCRIPT_ID,以便将来可以再次使用脚本来更新同一个表.

这是表中的一个片段:

____     _____________   __________________  _____     _     _____
 999     EMS02075SVC     Host Controller     15099     3     60000 
1000     EMS02075SVC     DSM Controller      15099     1     60000 
1001     EMS02075WEB1    Application Server   4447     1     60000
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008 sql-update

5
推荐指数
1
解决办法
1万
查看次数

Access 2010中的TableDef对象需要什么参考

我正在尝试在新的Access 2010 Access安装中使用Access 2003中编写的宏/ .mdb文件.打开我的文件我得到一个编译错误,说TableDef无法找到该对象.当我检查我的工具 - >参考菜单时,我看到Microsoft DAO 3.6对象库可用,应该不够吗?或者是其他需要的东西TableDef

ms-access vba access-vba ms-access-2010 ms-access-2003

5
推荐指数
1
解决办法
4271
查看次数

如何取消隐藏丢失的隐藏表?

建立:

我知道如何从仪表板导航到隐藏的工作表,并选择暂时显示工作表的标签上的"取消隐藏工作表"通过右键点击.Tableau网站上的在线文档非常清晰.

题:

但是,如果纸张不是仪表板的一部分,我该如何取消隐藏?换句话说,如果隐藏工作表在添加到仪表板之前被隐藏,我该如何导航到隐藏工作表?

tableau-api

3
推荐指数
1
解决办法
7709
查看次数

使用多个连接的SQL计数

我有三个表以下列方式相互关联:

  1. 主持人(有多个会话)
  2. 会话(有多个进程)
  3. 流程

表结构如下:

  1. 主持人表 - id, name
  2. 会话表 - id, host_id, name
  3. 流程表 - id, session_id, name

我想要实现的是会话数量和每个主机上的进程数量.为实现这一点,我尝试了以下查询,但输出错误.

select host.id, 
       count(sessions.id) as "session count", 
       count(process.id) as "process count"
from host as host
     left outer join sessions as sessions on host.id = sessions.host_id
     left outer join process as process on sessions.id = process.session_id
group by host.id;
Run Code Online (Sandbox Code Playgroud)

这是架构的SQLFiddle.

根据小提琴中的数据,输出应为:

id | session count | process count 
----------------------------------
1  |     2         |   3
2  |     1         |   2
3 …
Run Code Online (Sandbox Code Playgroud)

sql sql-server

2
推荐指数
1
解决办法
61
查看次数