标签: sql-server-2005

索引中包含列的硬性和快速规则

是否有任何硬性规则来决定应该将哪些列以及应该以何种顺序放置在 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)

以及是什么导致发布者决定保留姓氏列。为什么不是其他列?以及如何决定我们应该以什么顺序保留列?

index sql-server-2005 sql-server-2008 sql-server

38
推荐指数
3
解决办法
4万
查看次数

收缩数据库和文件有什么区别?

DBCC ShrinkDatabase()
DBCC ShrinkFile()
Run Code Online (Sandbox Code Playgroud)
  1. 我是否需要同时运行两个 DBCC 命令才能缩小数据库?
  2. 上面这两个有什么区别?

sql-server-2005 sql-server shrink dbcc

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

删除大量行后,SQL Server 数据库大小没有减少。

我不擅长 SQL,但我有一个数据库要维护。

几乎没有地方留给它了,所以我决定删除所有数据,比如说 2008 年。在执行删除查询(清理了大约 10 000 000 行)和清理事务日志后,我发现我的操作对数据库大小没有影响。还有什么我需要做的吗?

sql-server-2005 sql-server

34
推荐指数
3
解决办法
15万
查看次数

对于 DST 之前或之后的日期,如何获得 UTC 和本地时间之间的正确偏移量?

我目前使用以下方法从 UTC 日期时间获取本地日期时间:

SET @offset = DateDiff(minute, GetUTCDate(), GetDate())
SET @localDateTime = DateAdd(minute, @offset, @utcDateTime)
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果夏令时发生在GetUTCDate()和之间@utcDateTime@localDateTime最终会休息一个小时。

是否有一种简单的方法可以将非当前日期的日期从 UTC 转换为当地时间?

我使用的是 SQL Server 2005

sql-server-2005 sql-server utc-time timezone

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

从 SQL Server 2008 降级到 2005

使用 SQL 2008 构建的数据库文件与 2005 不兼容。有解决办法吗?

sql-server-2005 sql-server-2008

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

当我向它们添加 WHERE 子句时,视图是否被优化?

如果您在视图内部或外部过滤视图会有所不同吗?

例如,这两个查询之间有什么区别吗?

SELECT Id
FROM MyTable
WHERE SomeColumn = 1
Run Code Online (Sandbox Code Playgroud)

或者

SELECT Id
FROM MyView
WHERE SomeColumn = 1
Run Code Online (Sandbox Code Playgroud)

并且MyView定义为

SELECT Id, SomeColumn
FROM MyTable
Run Code Online (Sandbox Code Playgroud)

如果源表位于链接服务器上,答案有什么不同吗?

我问是因为我必须从链接服务器两次查询一个大表(4400 万行),并获得结果的汇总。我想知道是否应该创建两个视图来访问数据,每个查询一个视图,或者我是否可以使用单个视图和一个WHERE子句。

performance sql-server-2005 sql-server view query-performance

32
推荐指数
2
解决办法
3万
查看次数

哪个更有效:从链接服务器中选择还是插入到链接服务器?

假设我必须将数据从一台服务器导出到另一台服务器(通过链接服务器)。哪个语句会更有效率?

在源服务器中执行:

INSERT INTO [DestinationLinkedServer].[DestinationDB].[dbo].[Table]
SELECT a, b, c, ... FROM [dbo].Udf_GetExportData()
Run Code Online (Sandbox Code Playgroud)

或者在目标服务器中执行:

INSERT INTO [dbo].[Table]
SELECT a, b, c, ...
FROM OPENQUERY([OriginLinkedServer],
    'SELECT a, b, c, ... FROM [OriginDB].[dbo].Udf_GetExportData()')
Run Code Online (Sandbox Code Playgroud)

哪一个会更快并且总共消耗更少的资源(源服务器和目标服务器)?两台服务器都是 SQL Server 2005。

sql-server-2005 sql-server insert linked-server

32
推荐指数
2
解决办法
6万
查看次数

对于表的大量更改,有什么更好的方法:DELETE 和 INSERT 每次或 UPDATE 存在?

我正在做一个项目,我需要每天在一张表中更改大约 36K 条记录。我想知道什么会表现得更好:

  1. 删除行并插入新行,或
  2. 更新已经存在的行

对我来说,删除所有行并插入新行会更容易,但如果这会使表和索引碎片化并影响性能,那么我更愿意在可能的情况下进行更新并仅在必要时删除/插入。

这将是一项夜间服务,我不希望提高流程本身的速度。我更关心对这个表的查询性能,我已经有 8900 万条记录,以及这个每晚的过程将如何影响它。

对于这个夜间流程,我应该删除/插入记录还是应该更新现有记录(在可能的情况下)?

performance sql-server-2005 sql-server application-design fragmentation

30
推荐指数
4
解决办法
6万
查看次数

如何在不耗尽内存的情况下运行包含许多插入内容的大型脚本?

题:

我有一个脚本,其中包含来自 select 语句的大约 45,000 个插入。当我尝试运行它时,我收到一条错误消息,指出我的内存不足。我怎样才能运行这个脚本?

语境:

  1. 添加了一些新的数据字段,使应用程序与客户端使用的另一个应用程序配合得很好。
  2. 从客户端获得了一份数据电子表格,其中包含将当前数据项映射到这些新字段的值的数据。
  3. 将电子表格转换为插入语句。
  4. 如果我只运行一些语句,它会起作用,但整个脚本不会。
  5. 没有。没有错别字。

如果有不同的方式我应该加载这些数据,请随时批评我并让我知道。

sql-server-2005 sql-server etl

29
推荐指数
3
解决办法
9万
查看次数

在 SQL Server 2005 上获得最少多列的最有效方法是什么?

我想从 6 列中获取最小值。

到目前为止,我已经找到了三种方法来实现这一点,但我担心这些方法的性能,并想知道哪种方法对性能更好。

第一种方法是使用大 case 语句。这是一个包含 3 列的示例,基于上面链接中的示例。我的案例陈述会更长,因为我将查看 6 列。

Select Id,
       Case When Col1 <= Col2 And Col1 <= Col3 Then Col1
            When Col2 <= Col3 Then Col2 
            Else Col3
            End As TheMin
From   MyTable
Run Code Online (Sandbox Code Playgroud)

第二种选择是将UNION运算符与多个选择语句一起使用。我会把它放在一个接受 Id 参数的 UDF 中。

select Id, dbo.GetMinimumFromMyTable(Id)
from MyTable
Run Code Online (Sandbox Code Playgroud)

select min(col)
from
(
    select col1 [col] from MyTable where Id = @id
    union all
    select col2 from MyTable where Id = @id
    union all
    select col3 …
Run Code Online (Sandbox Code Playgroud)

performance sql-server-2005 sql-server aggregate

29
推荐指数
3
解决办法
6万
查看次数