【发布时间】:2015-09-21 12:21:20
【问题描述】:
有人遇到过这个问题吗?一个简单的插入语句耗时 7 秒,这个表包含 300 行记录。此表上没有触发器。
表:
CREATE TABLE [dbo].[Table]
(
[intMsgIn] [int] IDENTITY(1,1) NOT NULL,
[charType] [char](4) NOT NULL,
[dtTrx] [datetime] NOT NULL,
[varMsg] [varchar](4000) NULL,
CONSTRAINT [PK_Tbl] PRIMARY KEY CLUSTERED ([intMsgIn] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
SQL语句:
INSERT INTO Table (charType, dtTrx, varMsg)
VALUES(@charType, getdate(), @varMsg)
SELECT @@IDENTITY
此 SQL 语句是存储过程中的代码,然后由 C# 应用程序调用。
有什么可能的原因导致这个慢吗?
【问题讨论】:
-
数据库还在做什么?是否存在可能锁定表的查询?
-
我建议使用
SCOPE_IDENTITY()而不是其他任何东西(如@@IDENTITY)来获取新插入的标识值。 See this blog post for an explanation as to WHY -
附带说明,不要使用
@@IDENTITY,使用SCOPE_IDENTITY()。 -
当你从 SSMS 中得到它时会发生什么?
-
你是如何从 C# 调用它的?您可以发布您正在使用的代码吗?
标签: c# sql-server database-performance