让我们检查这两个语句:
IF (CONDITION 1) OR (CONDITION 2)
...
IF (CONDITION 3) AND (CONDITION 4)
...
Run Code Online (Sandbox Code Playgroud)
如果CONDITION 1是TRUE,会CONDITION 2被检查吗?
如果CONDITION 3是FALSE,会CONDITION 4被检查吗?
条件如何WHERE:SQL Server 引擎是否优化WHERE子句中的所有条件?程序员是否应该以正确的顺序放置条件以确保 SQL Server 优化器以正确的方式解析它?
添加:
感谢 Jack 提供链接,来自 t-sql 代码的惊喜:
IF 1/0 = 1 OR 1 = 1
SELECT 'True' AS result
ELSE
SELECT 'False' AS result
IF 1/0 = 1 AND 1 = 0
SELECT 'True' …Run Code Online (Sandbox Code Playgroud) 我目前正在学习 SQL 70-433(Microsoft 认证考试),我对“查询成本”性能指标感到非常困惑。
根据我可以通过谷歌找到的任何文档,查询成本是一个百分比数字,代表整个批次的任何一部分所占的百分比。这对我来说似乎有点奇怪,因为我对特定查询的绝对优点感兴趣,而不是它相对于碰巧出现在它旁边的其他查询的优点。
但后来我想,好吧,也许你期望做的是并排放置两个替代查询,将它们作为“一批”运行,然后成本低于 50% 的那个就是赢家。
但微软 SQL 70-433 培训工具包的第 6 章第一课中对查询成本的讨论似乎与此无关。
这是一个示例:它们显示一个包含两个相关子查询的查询,然后通过用 OUTER APPLY 替换子查询来改进它。结果:“这个查询的成本大约是 76,而第一个查询的成本是它的两倍,大约 151。” 然后他们进一步改进了查询,并将成本从 76 降低到 3.6。它们并不暗示这些数字是百分比,而是暗示它们是与作为独立对象的查询相关的绝对数字,而不参考任何其他查询。无论如何,第一个查询的成本怎么会是 151%?
在本章的后面,他们展示了一个执行计划的屏幕截图,它包含三个部分。第一个说“成本:0%”,第二个说“成本:1%”,最后一个说“成本:99%”但是截图下面的文字(书本身)“这个查询的成本是0.56” . 我猜他们意味着其他类型的成本,但我在其他地方找不到它的参考。
有人可以帮忙吗?我彻底糊涂了。
我以前没有见过SLEEP_TASK等待类型,今天我似乎得到了很多。
我不是正式的 DBA,只是一名了解 DBA 知识的 SQL Server 开发人员。我们上周末将服务器升级到10.52.2500.0- 我认为是 R2SP1。
我在网上能找到的所有信息都表明SLEEP_TASK服务器正在等待某种内部进程完成。我没有任何阻塞或任何后台进程,如检查点或幽灵清理运行,所以我有点难住。
有没有人以前见过这种等待类型,如果有,你能告诉我是什么原因造成的吗?
是否有任何硬性规则来决定应该将哪些列以及应该以何种顺序放置在 Included in non-clustered index 中。我刚刚读了这篇文章/sf/ask/91559331/ 我发现以下查询:
SELECT EmployeeID, DepartmentID, LastName
FROM Employee
WHERE DepartmentID = 5
Run Code Online (Sandbox Code Playgroud)
海报建议制作这样的索引:
CREATE NONCLUSTERED INDEX NC_EmpDep
ON Employee(EmployeeID, DepartmentID)
INCLUDE (Lastname)
Run Code Online (Sandbox Code Playgroud)
我的问题来了,为什么我们不能像这样制作索引
CREATE NONCLUSTERED INDEX NC_EmpDep
ON Employee( EmployeeID, DepartmentID, LastName)
Run Code Online (Sandbox Code Playgroud)
或者
CREATE NONCLUSTERED INDEX NC_EmpDep
ON Employee( EmployeeID, LastName)
INCLUDE (DepartmentID)
Run Code Online (Sandbox Code Playgroud)
以及是什么导致发布者决定保留姓氏列。为什么不是其他列?以及如何决定我们应该以什么顺序保留列?
定义表时,按目的对逻辑组中的列和组本身进行排序会很有帮助。表中列的逻辑顺序向开发人员传达了意义,是良好风格的元素。
这是清楚的。
然而,不清楚的是,表中列的逻辑顺序是否对其在存储层的物理顺序有任何影响,或者是否有任何其他人可能关心的影响。
除了对样式的影响之外,列顺序是否重要?
Stack Overflow 上有一个关于这个的问题,但它缺乏权威的答案。
sql-server-2008 database-design sql-server database-internals
SELECT CAST (
REPLACE (
REPLACE (
XEventData.XEvent.value ('(data/value)[1]', 'varchar(max)'),
'<victim-list>', '<deadlock><victim-list>'),
'<process-list>', '</victim-list><process-list>')
AS XML) AS DeadlockGraph
FROM (SELECT CAST (target_data AS XML) AS TargetData
FROM sys.dm_xe_session_targets st
JOIN sys.dm_xe_sessions s ON s.address = st.event_session_address
WHERE [name] = 'system_health') AS Data
CROSS APPLY TargetData.nodes ('//RingBufferTarget/event') AS XEventData (XEvent)
WHERE XEventData.XEvent.value('@name', 'varchar(4000)') = 'xml_deadlock_report';
Run Code Online (Sandbox Code Playgroud)
在我的机器上完成大约需要 20 分钟。报告的统计数据是
Table 'Worktable'. Scan count 0, logical reads 68121, physical reads 0, read-ahead reads 0,
lob logical reads 25674576, lob …Run Code Online (Sandbox Code Playgroud) xml sql-server execution-plan database-internals sql-server-2012
在每个 SQL 语句之后使用 GO 语句的原因是什么?我知道 GO 表示批处理结束和/或允许声明的声誉,但是在每个声明之后使用它有什么好处。
我只是很好奇,因为很多 Microsoft 文档等都在每次声明后开始使用它,或者我才刚刚开始注意到。
还有什么被认为是最佳实践?
我有一个表测试,其中包含主键和自动递增的列 id 和名称。当且仅当没有记录时,我想插入一条新记录。例如
输入是 id=30122 和 name =john
如果有 ID 为 30122 的记录,那么我将 name 列更新为 john,如果没有记录,那么我将插入一条新记录。
我可以使用 2 个查询,例如
select * from test where id=30122
Run Code Online (Sandbox Code Playgroud)
如果它有一些记录,那么我可以使用 update test set name='john' where id=3012
或者如果它没有记录,那么我可以使用
insert into test(name) values('john')
Run Code Online (Sandbox Code Playgroud)
但我想使用单个查询?
有人可以告诉它是否可能吗?
随着内部应用程序经过多年的发展,您偶尔会发现有许多人们认为不再相关并想要剔除的表。在 SQL 环境中识别数据库依赖项的实用方法是什么?
我工作过的地方采取了相当残酷的选择,例如:
我很欣赏 SQL Server 带有用于跟踪该实例中的依赖项的工具,但是如果您在不同的实例上拥有数据库,这些工具似乎很困难。是否有可以更轻松地查询依赖项的选项,也许可以回答诸如“此列在哪里使用?”之类的问题。答案是“在此存储过程中的另一台服务器上结束”或“在此 SSIS 包中结束”?
从技术上讲,NULL = NULL 是 False,根据该逻辑,没有 NULL 等于任何 NULL,并且所有 NULL 都是不同的。这不应该意味着所有 NULL 都是唯一的并且唯一索引应该允许任意数量的 NULL 吗?
null database-design sql-server constraint unique-constraint
sql-server ×10
t-sql ×2
condition ×1
constraint ×1
index ×1
management ×1
merge ×1
null ×1
optimization ×1
performance ×1
ssms ×1
upsert ×1
wait-types ×1
xml ×1