是否有任何硬性规则来决定应该将哪些列以及应该以何种顺序放置在 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)
以及是什么导致发布者决定保留姓氏列。为什么不是其他列?以及如何决定我们应该以什么顺序保留列?
DBCC ShrinkDatabase()
DBCC ShrinkFile()
Run Code Online (Sandbox Code Playgroud)
我不擅长 SQL,但我有一个数据库要维护。
几乎没有地方留给它了,所以我决定删除所有数据,比如说 2008 年。在执行删除查询(清理了大约 10 000 000 行)和清理事务日志后,我发现我的操作对数据库大小没有影响。还有什么我需要做的吗?
我目前使用以下方法从 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 2008 构建的数据库文件与 2005 不兼容。有解决办法吗?
如果您在视图内部或外部过滤视图会有所不同吗?
例如,这两个查询之间有什么区别吗?
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
假设我必须将数据从一台服务器导出到另一台服务器(通过链接服务器)。哪个语句会更有效率?
在源服务器中执行:
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。
我正在做一个项目,我需要每天在一张表中更改大约 36K 条记录。我想知道什么会表现得更好:
对我来说,删除所有行并插入新行会更容易,但如果这会使表和索引碎片化并影响性能,那么我更愿意在可能的情况下进行更新并仅在必要时删除/插入。
这将是一项夜间服务,我不希望提高流程本身的速度。我更关心对这个表的查询性能,我已经有 8900 万条记录,以及这个每晚的过程将如何影响它。
对于这个夜间流程,我应该删除/插入记录还是应该更新现有记录(在可能的情况下)?
performance sql-server-2005 sql-server application-design fragmentation
题:
我有一个脚本,其中包含来自 select 语句的大约 45,000 个插入。当我尝试运行它时,我收到一条错误消息,指出我的内存不足。我怎样才能运行这个脚本?
语境:
如果有不同的方式我应该加载这些数据,请随时批评我并让我知道。
我想从 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) sql-server-2005 ×10
sql-server ×9
performance ×3
aggregate ×1
dbcc ×1
etl ×1
index ×1
insert ×1
shrink ×1
timezone ×1
utc-time ×1
view ×1