Sql server 在表中插入行/更新行时,什么索引对性能有好处?

Sql server 在表中插入行/更新行时,什么索引对性能有好处?,sql-server,tsql,database-performance,Sql Server,Tsql,Database Performance,表具有主键聚集索引。 上表经常出现死锁,导致数据丢失。 在插入行或更新行时,最好添加哪个索引具有更好的性能 表: ID Int标识, EntityID Int, EntityName nvarchar200, 测量ID Int, 卡莱顿日期时间 主键:ID 每次将记录插入表中时,记录都会非常频繁 **在存储的Insert和update过程中是否有任何隔离级别或锁?这可能是一个非常复杂的问题,尤其是在与索引性能相关时,但在请顾问之前,请询问您的SQL server,不要盲目创建这些级别或锁,它们只

表具有主键聚集索引。 上表经常出现死锁,导致数据丢失。 在插入行或更新行时,最好添加哪个索引具有更好的性能

表: ID Int标识, EntityID Int, EntityName nvarchar200, 测量ID Int, 卡莱顿日期时间

主键:ID

每次将记录插入表中时,记录都会非常频繁


**在存储的Insert和update过程中是否有任何隔离级别或锁?

这可能是一个非常复杂的问题,尤其是在与索引性能相关时,但在请顾问之前,请询问您的SQL server,不要盲目创建这些级别或锁,它们只会给您一个指示。 还要记住填充因子,这可能会对插入性能产生有利影响。 需要2008年及以上版本,并将为脱机重建生成代码。影响超过1k表示需要注意

    USE <YourDBName>
    SELECT (avg_total_user_cost * avg_user_impact/100.0) * (user_scans +user_seeks ) Impact
    , [Table] = [statement]
    , [CreateIndexStatement] = 'CREATE NONCLUSTERED INDEX IX_' + sys.objects.name COLLATE DATABASE_DEFAULT  + '_' 
    + REPLACE(REPLACE(REPLACE(ISNULL(mid.equality_columns,'')+ISNULL(mid.inequality_columns,''), '[', ''), ']',''), ', ','_') + ' ON ' + [statement] 
    + REPLACE(' ( ' + IsNull(mid.equality_columns, '')
    + CASE WHEN mid.inequality_columns IS NULL THEN '' ELSE CASE WHEN mid.equality_columns IS NULL THEN '' ELSE ',' END + mid.inequality_columns END + ' ASC ) ' ,',',' ASC ,') + CASE WHEN mid.included_columns IS NULL THEN '' ELSE 'INCLUDE (' + mid.included_columns + ')' END 
    + 'WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = ON, SORT_IN_TEMPDB = ON, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON,FILLFACTOR = 90) ON [PRIMARY];'
    , mid.equality_columns
    , mid.inequality_columns
    , mid.included_columns
    FROM sys.dm_db_missing_index_group_stats AS migs 
    INNER JOIN sys.dm_db_missing_index_groups AS mig ON migs.group_handle = mig.index_group_handle 
    INNER JOIN sys.dm_db_missing_index_details AS mid ON mig.index_handle = mid.index_handle 
    INNER JOIN sys.objects WITH (nolock) ON mid.OBJECT_ID = sys.objects.OBJECT_ID 
    WHERE (migs.group_handle IN (SELECT TOP (500) group_handle FROM sys.dm_db_missing_index_group_stats WITH (nolock) ORDER BY (avg_total_user_cost * avg_user_impact) * (user_seeks + user_scans) DESC))  
    AND OBJECTPROPERTY(sys.objects.OBJECT_ID, 'isusertable') = 1 
    ORDER BY Impact DESC, [CreateIndexStatement] DESC ;

没有索引。堆具有最佳的插入性能。更新是一个两全其美的游戏,尽管你没有显示表格。主键是复合键吗?聚集索引中的数据是按顺序存储在磁盘上的,因此,如果您的主键包含的新条目不能保证其顺序,例如电子邮件地址或身份号码,则您可能会看到插入性能不佳。如果不了解所有细节,很难回答这样的问题。请添加更多信息。@Raj:heap只有在真正了解其优点和缺点时才能使用。除了更新之外,DELETE的性能很差,如果使用非聚集索引,即使使用INSERT也是一样的。那么碎片呢?如果你真的不想查询这个结构,几乎可以使用裸堆。你会遇到什么死锁?@Adrian。。谢谢你的邀请。。在问题中添加了更多细节。如果有,请建议。。。提前谢谢