问题:
最近程序总会抛出如下异常:
An exception of type'System.Data.SqlClient.SqlException' occurred and was caught.
----------------------------------------------------------------------------------
Type :System.Data.SqlClient.SqlException, System.Data, Version=4.0.0.0,Culture=neutral, PublicKeyToken=b77a5c561934e089
Message : Timeoutexpired. The timeout period elapsedprior to completion of the operation or the server is not responding.
Source : .Net SqlClient Data Provider......
......Database.ExecuteReader(DbCommandcommand)......
读取数据超时。
然后就去看了下DataBase里对应的tables,发现table的结构简单,但是数据量很大,有几十万上百万条。再看一下有没有建Indexes/Keys,发现没有,恍然大悟。
解决方法:
根据表的结构,建立了Indexes/Keys下的 Unique key,类似如下:
ALTER TABLE [dbo].[ZData]
add CONSTRAINT [IX_ZData] UNIQUE NONCLUSTERED
(
[Pid] ASC,
[EntryID] ASC,
[Date] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO测试,发现速度快很多,减小了timeout的风险。
本文介绍了一种解决SQL查询因数据量大导致读取超时的方法,通过为表建立索引(Indexes/Keys),显著提高了查询速度并降低了超时风险。
6608

被折叠的 条评论
为什么被折叠?



