当前位置: 代码迷 >> Sql Server >> 运行时间200ms之内的sql还有优化空间吗
  详细解决方案

运行时间200ms之内的sql还有优化空间吗

热度:74   发布时间:2016-04-27 11:44:31.0
运行时间200ms以内的sql还有优化空间吗
最简单的一个insert into语句:
写入登录历史表,

exec sp_executesql N'INSERT INTO [LoginHistory]([UserID],[LoginTime],[LogoutTime],[DeviceType]) VALUES (@UserID,@LoginTime,@LogoutTime,@DeviceType);select @@IDENTITY',[email protected] int,@LoginTime datetime,@LogoutTime datetime,@DeviceType int',@UserID=2,@LoginTime='2012-07-27 16:25:49.270',@LogoutTime=NULL,@DeviceType=1

在并发量300的时候最长执行时间需要120ms,该表只有一个唯一主键ID, identity1,1)和一个外键。

且该表中数据量目前不超过2w,请问大家一下,还有优化的空间吗?

------解决方案--------------------
不要动态执行,用存储过程直接insert,
------解决方案--------------------
貌似没有什么可优化空间了。
SQL code
create table [LoginHistory](    Id int identity(1,1) primary key,    UserID int,    LoginTime datetime,    LogoutTime datetime,    DeviceType int)gocreate proc Add_LoginHistory(        @UserID int,    @LoginTime datetime,    @LogoutTime datetime,    @DeviceType int)asbegin    insert into [LoginHistory]    ([UserID],[LoginTime],[LogoutTime],[DeviceType])     values (@UserID,@LoginTime,@LogoutTime,@DeviceType);    select @@IDENTITYendgosp_executesql N'INSERT INTO [LoginHistory]([UserID],[LoginTime],[LogoutTime],[DeviceType]) VALUES (@UserID,@LoginTime,@LogoutTime,@DeviceType);select @@IDENTITY',[email protected] int,@LoginTime datetime,@LogoutTime datetime,@DeviceType int',@UserID=2,@LoginTime='2012-07-27 16:25:49.270',@LogoutTime=NULL,@DeviceType=1exec Add_LoginHistory 2,'2012-07-27 16:25:49.270',null,1
------解决方案--------------------
SQL code
sp_executesql N'INSERT INTO [LoginHistory]([UserID],[LoginTime],[LogoutTime],[DeviceType]) VALUES (@UserID,@LoginTime,@LogoutTime,@DeviceType);select @@IDENTITY',[email protected] int,@LoginTime datetime,@LogoutTime datetime,@DeviceType int',@UserID=2,@LoginTime='2012-07-27 16:25:49.270',@LogoutTime=NULL,@DeviceType=1exec Add_LoginHistory 2,'2012-07-27 16:25:49.270',null,1insert into [LoginHistory]([UserID],[LoginTime],[LogoutTime],[DeviceType]) values (2,'2012-07-27 16:25:49.270',null,1);
------解决方案--------------------
探讨
在并发量300的时候最长执行时间需要120ms,该表只有一个唯一主键ID, identity1,1)和一个外键。
且该表中数据量目前不超过2w,请问大家一下,还有优化的空间吗?

------解决方案--------------------
探讨

引用:
在并发量300的时候最长执行时间需要120ms,该表只有一个唯一主键ID, identity1,1)和一个外键。
且该表中数据量目前不超过2w,请问大家一下,还有优化的空间吗?

对于历史表,其实是不需要外键的,建议删除.

------解决方案--------------------
这个语句已经很简单了,没什么好优化的
把外键删除试试看吧
------解决方案--------------------
恩,去掉外键再看看
------解决方案--------------------
删除主键,去掉聚集索引。
------解决方案--------------------
恭喜楼主,

------解决方案--------------------
你的聚集索引是怎么建立的,不会就是在主键上那个Identity上面的吧?如果是的话,那么就很奇怪了。
  相关解决方案