用 存储过程 太慢了怎么办!!!

我写了下面这个存储过程用于更新数据库:
-------------------------------------------------
CREATE PROCEDURE [update_行情表]
(@代码_1 char,
@最高_5 [real],
@最低_6 [real],
@最新_7 [real],
@总手_8 [real],
@总额_9 [real])

AS
UPDATE [实时数据库].[dbo].[行情表]
SET [最高] = @最高_5,
[最低] = @最低_6,
[最新] = @最新_7,
[总手] = @总手_8,
[总额] = @总额_9
WHERE [代码] = @代码_1
GO
--------------------------------------------------
注:行情表以[代码]为主键。大约有1500多条记录。

虽然看起来很简单,但此过程每秒被调用50次之多。于是CPU时间占有高居不下。严重影响
了系统的运行。

请问有没有好的办法解决此问题。
(想法:能不能把该数据表做到内存中,只在内存中更新。但也要能像普遍表一样能被
ODBC正常访问?)

可能可以这样,你的存储过程不要一次更新一个代码,而是把一段时间的更新,
插入到一个表,再一次更新。

CREATE PROCEDURE [update_行情表]
(@代码_1 char,
@最高_5 [real],
@最低_6 [real],
@最新_7 [real],
@总手_8 [real],
@总额_9 [real])

AS

set no count on

if (SELECT rows FROM sysindexes
WHERE id = OBJECT_ID('tabTemp') AND indid < 2 ) < 100
begin
UPDATE a
SET [最高] = b.最高,
[最低] = b.最低,
[最新] = b.最新,
[总手] = b.总手,
[总额] = b.总额
from [实时数据库].[dbo].[行情表] a,tab_Temp b
WHERE a.[代码] = b.代码
exec ('truncate table tab_temp')
end

insert tab_temp (
[代码],
[最高] ,
[最低],
[最新],
[总手],
[总额]

values (
@代码_1,
@最高_5,
@最低_6,
@最新_7,
@总手_8,
@总额_9

GO

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus