相关疑难解决方法(0)

“避免基于递增键创建聚集索引”是 SQL Server 2000 天以来的神话吗?

我们的数据库由许多表组成,其中大多数使用整数代理键作为主键。这些主键中约有一半位于标识列上。

数据库开发始于 SQL Server 6.0。

从一开始就遵循的规则之一是,避免根据递增键创建聚集索引,正如您在这些索引优化技巧中找到的那样。

现在使用 SQL Server 2005 和 SQL Server 2008,我强烈的印象是情况发生了变化。同时,这些主键列是表的聚集索引的完美首选。

sql-server-2005 sql-server clustered-index

22
推荐指数
3
解决办法
4675
查看次数

并行最佳实践

一般设置并行性的最佳实践是什么?我知道 SQL Server 默认0使用所有可用的处理器,但是在什么情况下您要更改此默认行为?

我记得在某处读到过(我必须寻找这篇文章),对于 OLTP 工作负载,您应该关闭并行性(将 maxdop 设置为1)。我不认为我完全理解你为什么要这样做。

您什么时候将 maxdop 保持到 SQL Server (0)?您何时会关闭并行性 (1)?您何时会明确说明特定数量的处理器的 maxdop?

什么导致并行?

sql-server best-practices parallelism

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

索引上的行锁会导致键锁吗?:事务(进程 ID xy)已死锁,包括示例

我目前遇到错误(通过 traceID 1222 记录):

keylock hobtid= 8205698989 objectname=mydb.dbo.Orders indexname = _dta_Index_Orders_5_120345_K1_K2_7_1 id=lock43fe181 mode=S AssociatedObjectID = 8205698989 
waiterID = process 85b2566 mode=S requestType=wait
waiter-list
keylock hobtid= 820562208 objectname=mydb.dbo.Orders indexname = pk_Orders_OrderID id=lock4012341 mode=X AssociatedObjectID = 820562208 
resource-list
Update Orders set OrderType = 1 where OrderID = 52000 and DeliveryID = 1236
inputbuf
Update [Orders] set [OrderType] = @1 where [OrderID] = @2 and [DeliveryID] = @3
Run Code Online (Sandbox Code Playgroud)

桌子:

Orders
Run Code Online (Sandbox Code Playgroud)

列:

OrderID         int (pk)
OrderNumber     Varchar(50)
OrderDate       datetime
OrderType       int
DeliveryID  int
DateDelivered …
Run Code Online (Sandbox Code Playgroud)

index sql-server-2005

2
推荐指数
1
解决办法
937
查看次数