我有两个查询,它们大多是同一个 where 表达式。它们联合在一起以获得完整的结果集。查询中没有分组,也没有排序,也没有区别。但是,直接在最终连接/选择运算符之前和任何连接之后有两种不同的类型。鉴于上述信息,我对这些不同的类型感到有点困惑。
任何人都可以深入了解为什么这个运营商在这个计划中吗?
FWIW,我重写了这个查询,只是想填补知识空白/纠正误解。
谢谢
我有两个查询,它们大多是同一个 where 表达式。它们联合在一起以获得完整的结果集。查询中没有分组,也没有排序,也没有区别。但是,直接在最终连接/选择运算符之前和任何连接之后有两种不同的类型。鉴于上述信息,我对这些不同的类型感到有点困惑。
任何人都可以深入了解为什么这个运营商在这个计划中吗?
FWIW,我重写了这个查询,只是想填补知识空白/纠正误解。
谢谢
参考:https ://www.brentozar.com/pastetheplan/?id=Bklc3fGNt
我在#LargerRange 和#SmallerRange 上都有一个聚集索引。这些索引包含 5 个关键列:Name、InOrOut、LocCode、VisitID 和 AccountNumber [按此顺序]。除了位于两个计算标量之间的 Merge Join 运算符之外,大多数估计看起来都不错。这个特定的运算符返回约 53,000% 的估计行。紧随其后的运算符(Concat 和 Table Insert)的估计也很差,但没有那么差。尽管如此,这个插入本身大约需要一两分钟,而且这并没有像在生产中那样处理尽可能多的行。
我对为什么那个特定的运算符大大低估了行数感到有些困惑。第一个错误估计是否会导致以下估计也有偏差?这是否会减慢插入速度(这是一个选择;插入到表中 + with(tablock) 具有聚集索引的性能同样糟糕)?为什么这个估计如此糟糕,我该如何改进它?我怀疑它与聚集索引中键列的顺序有关,但我觉得我只是错过了一些东西,因为我基本上被难住了。非常感谢任何建议。谢谢你。
我是一个偶然的 DBA,没有任何脚本知识/背景。我们有一堆不同的数据库(每个客户端都有自己的数据库),它们具有相同的结构,但数据不同。也就是说,我们会定期创建每个人都需要使用的功能。这意味着我必须将这些部署到我们 120 多个数据库中的每一个。如果不“手动”将其部署到每个数据库,我该怎么做?
我以前问过这个问题,但没有什么真正有用的。我得到的答案是“使用脚本”(不可行,因为我什至不知道如何开始)、“使用 RedGate 的工具”(没有钱购买,公司也不会购买),以及“不要使用标量 UDF 开头(完全无用)。
我还被告知“只要把它放在 master 或其他数据库中,然后调用它”。这是个好主意,但很快我们的权限/登录名就会改变,我认为一个数据库用户将无法调用另一个数据库(HIPPA 等等)。
任何人都可以为我级别的“DBA”提供一些指导吗?
谢谢
更新:我发现可以将 sp_MSforeachdb 用于 DDL 语句。显然,这不是最佳实践,因为 sp_MSforeachdb 没有记录并且不受 MS“支持”。与此一样,使用风险自负。它对我来说就像一个魅力。请参阅示例 2:https ://www.mssqltips.com/sqlservertip/1414/run-same-command-on-all-sql-server-databases-without-cursors/
对于那些不想走那条路并且和我处境相似的人,请使用答案部分提供的 Johnathan Fite 的 PS 脚本。这是一个方便的脚本,尤其是当您有多个服务器/实例时。
感谢大家!