我使用的是 SQL Server 2008 R2,当我查看 SQL Server 的服务时,我看到有两种不同的服务具有不同的实例。
SQLEXPRESS MSSQLSERVER谁能帮我弄清楚#1 和#2 之间的区别?
提前致谢
以下查询需要 497 ms 才能运行,如果我删除 AND 部分之后只需要 320 ms。有没有办法加快这个速度?我在“messages”表上的唯一索引是“messages_id”上的PK。'hidden' 字段是一个位字段(非空),'message_type_id' 是一个 int 字段(非空),而 message_id 是一个 int 字段(PK)。
SELECT COUNT(*)
FROM messages
WHERE message_type_id = 1
AND (hidden = 0 OR message_id = @message_id)
Run Code Online (Sandbox Code Playgroud)
提前致谢!
为什么主键约束默认在 PK 列上创建聚集索引?
我们可以创建一个有主键但没有聚集索引的表吗?我需要 PK 约束来维护列上的唯一值 + 非空,但我不想要聚集索引,因为该表中有太多插入。
我读过聚集索引对插入有性能影响。
我终于找到了查询的逻辑,现在我需要加快速度......如果可能的话(它运行 40 分钟 +/-)。它位于两张桌子上,一张只有几百行 ( tblTradingDays),另一张有超过一百万行 ( tblDailySMA)。它返回 4800 万行。
我的基本逻辑是:我为交易品种、交易日期和周期值的每个组合返回一行,创建一个“慢v 快”周期对。所以在原始表中,有一个符号、一个交易日期、一个周期 (5,10,20,...) 和该组合的实际值。我想比较所有期间组合的值(期间 p1 = 期间 p2 除外)。我正在对要用于进一步处理的记录进行编号。希望这是有道理的。
我尝试了连接和谓词中涉及的字段的各种索引和组合。在估计的执行计划中,看起来排序是最昂贵的操作。tblDailySMA尽管我添加了其他索引,但该计划中出现的唯一索引是非聚集的、唯一的、 on:Symbol, TradeDate, Period和 includes Value。它被扫描。查询如下,希望有人可以帮助我。提前致谢..
SELECT
ROW_NUMBER() OVER
(
ORDER BY t1.Symbol, t1.Period, t2.Period, t.TradingDate DESC
) RowNum,
t1.Symbol, t.TradingDate, t1.Period, t2.Period, t1.Value FastValue,
t2.Value SlowValue, (t1.Value - t2.Value) SlowFastDiff,
ChgSign = CASE WHEN t1.Value < t2.Value THEN 0
WHEN t1.Value >= t2.Value THEN 1
WHEN t1.Value IS NULL OR t2.Value IS NULL …Run Code Online (Sandbox Code Playgroud) 我使用SQL Server 2008 R2并希望为每个索引中的填充因子属性设置值。我寻找配方来计算此属性的最佳值(插入记录时性能更好)。还有我如何通过为这个属性设置尊重值来衡量查询性能。
非常感谢。
在我永无止境地寻求通过保存交易射击自己的过程中,我似乎找到了更多实现任务目的的方法。这次的save transaction子句本身是没问题的,不过正因为如此,我才写了下面的代码。
考虑以下带有嵌套错误处理程序的完整示例:
begin try
begin try
select 'Step 1';
end try
begin catch
select 'Step 1 handler - handling ''' + error_message() + '''';
goto commit_and_exit;
end catch;
begin try
select 'Step 2';
raiserror('Step 2 error', 16, 1);
end try
begin catch
select 'Step 2 handler - handling ''' + error_message() + '''';
goto commit_and_exit;
end catch;
end try
begin catch
select 'Outer handler - handling ''' + error_message() + '''';
goto commit_and_exit;
end catch
commit_and_exit:
raiserror('Error raised for …Run Code Online (Sandbox Code Playgroud) 我们使用 SQL Server 2008 R2 标准版(我们负担不起所有生产数据库服务器上的企业版),并且必须定期维护生产服务器中的关键索引(重建/重组)。问题是,由于我们使用的是标准版,因此我们无法访问重建索引在线选项。如果我们在重建这些关键索引时不限制对数据库的访问,我们会收到许多超时错误,因为在重建期间索引基本上是禁用的。我使用过诸如Ola Hallengren 的 Index Optimize script 之类的脚本,但这似乎并不能解决我的问题。
我想解决这个问题的方法是,当索引碎片化时,不要重建索引,而是创建一个单独的索引副本(即 IX_some_name_temp),一旦完成,删除原始的碎片索引,最后重命名副本索引回到原来的名字。我希望的是,在构建新索引时,Sql Server 可以使用原始索引(有点碎片化的索引),然后在构建新的临时索引后它可以开始使用那个索引,然后我们删除碎片索引并重命名和下次我们必须运行预定的作业时,我们将回到原始状态。
我的问题是,这种方法有意义吗?当我删除原始的碎片索引时,sql server 是否能够利用我的新临时索引副本?任何提示或可能的其他策略表示赞赏。
嗯,这是假设的场景,但我想了解的是从死后日志(例如 SQL Server Profiler 跟踪)到识别 ORM 情况下的代码的路径。为了让它不会太模糊,请考虑这样的场景:
那么,在这种情况下,DBA(也是 VB.Net 开发人员)从日志中诊断哪些代码(在这种情况下,Linq 查询)造成问题的通用路径是什么?在这种情况下,该应用程序正常,但会影响使用相同数据库/服务器的其他应用程序的响应时间。
那会与 Java+Hiberate 进程有很大不同吗?
编辑:我想了解从跟踪到罪魁祸首元查询的路径。如果应用程序中有 SQL,这意味着“在文件中查找”会话(在极端情况下可能带有一些正则表达式)可以将检查任务的目标减少到几十个可疑对象,而不是十分之一甚至数百个源文件。使用 ORM,如何使用 ORM(在这种情况下:EF)到达那个阶段?
因此,有一个通过集成服务运行的 ETL 作业,我以 SQL 作业名称 StartStageStore 开头。这个作业的最后一步是开始另一个作业并报告成功。此调用的作业称为 LoopStageStore。LoopStageStore 所做的只是执行一个存储过程,重新启动 StartStageStore 作业,这样我们不断地将源数据拉入我们的系统。这项工作已经运行了几个星期没有失败。直到最后两个晚上,我才开始收到此错误“以用户身份执行:AgentUser。SQLServerAgent 错误:运行作业 Stage/Store AgentUser 的请求被拒绝,因为该作业已根据用户 AgentUser 的请求运行。[SQLSTATE 42000](错误 22022) . 步骤失败。
这应该是不可能的,因为运行 StartStageStore 作业完成并且在 LoopStageStore 启动时不再运行。

在这里我们可以看到在 12:19:14 执行的最后一步。
下一个作业在 12:19:15 失败,表示 StartStageStore 当前正在运行。我已经有一个解决方法,我只是在第二份工作上抛出延迟。我只是想知道是否有人知道为什么会发生这种情况。
BEGIN
WAITFOR DELAY '00:01';
EXECUTE dbo.LoopStageStore
END; GO
Run Code Online (Sandbox Code Playgroud) 假设您要查询数据库以发现它包含的触发器类型。一种方法是对数据库中的所有触发器对象使用 OBJECTPROPERTY 函数。
有时 OBJECTPROPERTY 函数会产生令人困惑的结果。它的输出似乎取决于数据库上下文。
以下示例查询为 msdb 中的每个 sysmail 触发器返回一行:
SELECT
object_id,
name,
OBJECTPROPERTY(object_id, 'ExecIsInsertTrigger') AS IsInsertTrigger,
OBJECTPROPERTY(object_id, 'ExecIsUpdateTrigger') AS IsUpdateTrigger,
OBJECTPROPERTY(object_id, 'ExecIsDeleteTrigger') AS IsDeleteTrigger
FROM msdb.sys.objects
WHERE
[type] = 'TR' AND
name LIKE 'trig_sysmail_%';
GO
Run Code Online (Sandbox Code Playgroud)
目的是找出什么 DML 操作将触发每个触发器。例如,IsInsertTrigger如果触发器定义为AFTER INSERT,则该列包含 1 ,否则为0。
当我在 msdb 的上下文中执行查询时,结果集在每个计算列中都包含 0 或 1。它看起来像这样:
object_id name IsInsertTrigger IsUpdateTrigger IsDeleteTrigger
----------- ---------------------------- --------------- --------------- ---------------
713105631 trig_sysmail_profile 0 1 0
745105745 trig_sysmail_account 0 1 0
761105802 trig_sysmail_profileaccount 0 1 0
777105859 trig_sysmail_profile_delete …Run Code Online (Sandbox Code Playgroud)