4

我有一个包含 1000000个值的表。从中我需要检索一些满足我条件的值。但是,当我从 ASP.NET 执行下面提到的查询时,它会引发TimeOut expired异常。如何避免这种情况

"SELECT ID,Intime,OutTime from [dbo].MasterLog 
WHERE CardId=(SELECT ID from User WHERE Name like 'ki%')"

如果我得到答案,这将非常有用。提前致谢

4

4 回答 4

4

听起来您需要在查询的 where 子句中为列添加索引。

看一下这个

这也是

  • 还要考虑存储过程
  • Coz 存储过程将有助于在短时间内从数据库中检索数据。
  • 始终避免在前端编写查询。

但首先也是最重要的事情是索引,如果你有更多的数据意味着索引它。

于 2013-04-04T05:40:57.463 回答
2

除了更新你的连接和命令超时,如果你在 CardID 上添加一个非集群索引并包括列 ID、Intime、OutTime,这是一个覆盖索引,你的查询会更快,这将有所帮助。


CREATE NONCLUSTERED INDEX [IX_NCI_MasterLog_CardID] ON [dbo].[MasterLog]
(
    [CardID] ASC
)
INCLUDE (   [ID],
            [InTime],
            [OutTime[) 
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
于 2013-04-04T05:42:11.057 回答
1
  1. WEB.CONFIG TIMEOUT选项很长

  2. IIS 应用程序池TIMEOUT选项很长

  3. (当前页面)Request Header KeepAlive = true设置

于 2013-04-04T05:34:02.763 回答
0

试试这些,

  1. 正确指定 SQL 连接超时和命令超时。
  2. 为 CardId 上的表添加索引
  3. 首先选择 TOP 100 / 1000 条记录,并在需要时尝试获取其余记录以提高查询性能
于 2013-04-04T05:35:52.737 回答