标签: sql-server-2008

SQLEXPRESS 和 MSSQLSERVER 有什么区别?

我使用的是 SQL Server 2008 R2,当我查看 SQL Server 的服务时,我看到有两种不同的服务具有不同的实例。

  1. SQLEXPRESS
  2. MSSQLSERVER

谁能帮我弄清楚#1 和#2 之间的区别?

提前致谢

sql-server-2008 sql-server-2008-r2 visual-studio-2010

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

加速 COUNT(*) - WHERE 子句减慢查询速度

以下查询需要 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)

提前致谢!

sql-server-2008 sql-server t-sql count

7
推荐指数
2
解决办法
5629
查看次数

为什么主键上的聚集索引是强制性的?

为什么主键约束默认在 PK 列上创建聚集索引?

我们可以创建一个有主键但没有聚集索引的表吗?我需要 PK 约束来维护列上的唯一值 + 非空,但我不想要聚集索引,因为该表中有太多插入。

我读过聚集索引对插入有性能影响。

sql-server-2008 sql-server

7
推荐指数
1
解决办法
1793
查看次数

需要 SQL Server 索引/性能帮助(索引扫描和排序需要 40 分钟)

我终于找到了查询的逻辑,现在我需要加快速度......如果可能的话(它运行 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 sql-server sql-server-2008-r2

7
推荐指数
1
解决办法
576
查看次数

索引中填充因子的最佳值

我使用SQL Server 2008 R2并希望为每个索引中的填充因子属性设置值。我寻找配方来计算此属性的最佳值(插入记录时性能更好)。还有我如何通过为这个属性设置尊重值来衡量查询性能。

非常感谢。

index sql-server-2008 sql-server sql-server-2008-r2

7
推荐指数
1
解决办法
6792
查看次数

CATCH 块在不应触发时被触发

在我永无止境地寻求通过保存交易射击自己的过程中,我似乎找到了更多实现任务目的的方法。这次的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 stored-procedures t-sql error-handling

7
推荐指数
1
解决办法
1096
查看次数

在 SQL Server 2008 R2 标准版中在线重建索引的可行策略?

我们使用 SQL Server 2008 R2 标准版(我们负担不起所有生产数据库服务器上的企业版),并且必须定期维护生产服务器中的关键索引(重建/重组)。问题是,由于我们使用的是标准版,因此我们无法访问重建索引在线选项。如果我们在重建这些关键索引时不限制对数据库的访问,我们会收到许多超时错误,因为在重建期间索引基本上是禁用的。我使用过诸如Ola Hallengren 的 Index Optimize script 之类的脚本,但这似乎并不能解决我的问题。

我想解决这个问题的方法是,当索引碎片化时,不要重建索引,而是创建一个单独的索引副本(即 IX_some_name_temp),一旦完成,删除原始的碎片索引,最后重命名副本索引回到原来的名字。我希望的是,在构建新索引时,Sql Server 可以使用原始索引(有点碎片化的索引),然后在构建新的临时索引后它可以开始使用那个索引,然后我们删除碎片索引并重命名和下次我们必须运行预定的作业时,我们将回到原始状态。

我的问题是,这种方法有意义吗?当我删除原始的碎片索引时,sql server 是否能够利用我的新临时索引副本?任何提示或可能的其他策略表示赞赏。

sql-server-2008 sql-server index-tuning

7
推荐指数
2
解决办法
2574
查看次数

如何解决 orm 查询干扰其他应用程序

嗯,这是假设的场景,但我想了解的是从死后日志(例如 SQL Server Profiler 跟踪)到识别 ORM 情况下的代码的路径。为了让它不会太模糊,请考虑这样的场景:

  • SQL Server 2008
  • 实体框架作为 ORM

那么,在这种情况下,DBA(也是 VB.Net 开发人员)从日志中诊断哪些代码(在这种情况下,Linq 查询)造成问题的通用路径是什么?在这种情况下,该应用程序正常,但会影响使用相同数据库/服务器的其他应用程序的响应时间。

那会与 Java+Hiberate 进程有很大不同吗?

编辑:我想了解从跟踪到罪魁祸首元查询的路径。如果应用程序中有 SQL,这意味着“在文件中查找”会话(在极端情况下可能带有一些正则表达式)可以将检查任务的目标减少到几十个可疑对象,而不是十分之一甚至数百个源文件。使用 ORM,如何使用 ORM(在这种情况下:EF)到达那个阶段?

sql-server-2008 orm entity-framework troubleshooting

7
推荐指数
1
解决办法
535
查看次数

收到“由于作业已在运行而拒绝运行作业的请求” 当没有作业正在运行时?

因此,有一个通过集成服务运行的 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)

sql-server-2008 sql-server

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

为什么 OBJECTPROPERTY 返回 NULL?

假设您要查询数据库以发现它包含的触发器类型。一种方法是对数据库中的所有触发器对象使用 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)

sql-server-2008 sql-server

7
推荐指数
2
解决办法
2016
查看次数