后面的故事我有一个存储缓存时间的表,目前有大约1米行。当我用新版本的缓存项目更新表格时,我需要删除旧的缓存项目(约3k项目)。对于这些商品马上就被剔除并不重要,但我会认为这一点,因为当客户拿出缓存物品时,我希望他们获得最新版本。删除表格中的选定行(我如何提高速度)
但是删除仍然是“缓慢”,需要几秒钟才能让最终用户等待,有什么方法可以让这个过程更快吗? ATM即时通讯做一个简单的SQL
DELETE FROM cache where cache_event_id = X
我的问题是: 我可以让查询更快(我预计缓存表只有扩大规模,所以这个问题会变得更糟)? 我应该让删除SQL运行自己的线程,并与用户可能会暂时旧物品的事实生活?
Pr请求表格的其余信息。
CREATE TABLE [dbo].[cache](
[cache_id] [int] IDENTITY(1,1) NOT NULL,
[cache_name] [nchar](128) NOT NULL,
[cache_event_id] [int] NOT NULL,
[cache_encounter_id] [int] NOT NULL,
[cache_type_id] [tinyint] NOT NULL,
[cache_creation_date] [datetime] NOT NULL,
[cache_data] [varbinary](max) NOT NULL
) ON [PRIMARY]
所有指数由SQL Server事件探查的创建,好像我需要manualy删除旧索引 指数1:
CREATE NONCLUSTERED INDEX [_dta_index_cache_6_366624349__K2_K3_K5_K4_7] ON [dbo]. [cache]
(
[cache_name] ASC,
[cache_event_id] ASC,
[cache_type_id] ASC,
[cache_encounter_id] ASC
)
INCLUDE ([cache_data]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
指数2://也许actualy不使用
CREATE NONCLUSTERED INDEX [_dta_index_cache_6_366624349__K5_1_2_3_4_6_7] ON [dbo].[cache]
(
[cache_type_id] ASC
)
INCLUDE ([cache_id],
[cache_name],
[cache_event_id],
[cache_encounter_id],
[cache_creation_date],
[cache_data]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
索引3(I假定这个人是USEN删除)
CREATE NONCLUSTERED INDEX [_dta_index_cache_6_366624349__K3] ON [dbo].[cache]
(
[cache_event_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
数据通过BulkCopy类插入到表
数据被取出来(这是最关键的部分)
SqlCommand cmd = new SqlCommand("GetPageCache", connection);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@event_id", EventID); // int
cmd.Parameters.AddWithValue("@encounter_id", EncounterID); // int
cmd.Parameters.AddWithValue("@type_id", (int)CacheType); //int
cmd.Parameters.AddWithValue("@cachename", CacheName); // Required in some cases, but 90% this is just a fallback
使用所有索引和sql查询更新了原始邮件。 – EKS 2009-08-08 21:13:15