【发布时间】:2013-10-23 15:06:08
【问题描述】:
我正在处理一个 asp.net MVC4 项目并使用 SQL Server 2008。我的数据库表包含 100000 行。此外,连接字符串属性的最大池大小设置为 1000000,池设置为 true。
我的表结构如下:
CREATE TABLE tblNews
(
ID int IDENTITY(1,1) NOT NULL,
Url nvarchar(300) UNIQUE NOT NULL,
PubDate datetime NOT NULL,
Active bit NOT NULL,
Hit int NOT NULL,
...
)
还有一个索引如下:
CREATE NONCLUSTERED INDEX indexTblNews_Url
ON tblNews(Url)
我的选择查询是:
CREATE PROC spNewsGet
@Url nvarchar(300)
AS
UPDATE tblNews
SET Hit = Hit + 1
WHERE Url = @Url
AND PubDate > GETDATE()
AND Active = 1;
SELECT
*
FROM tblNews
WHERE Url = @Url
AND PubDate > GETDATE()
AND Active = 1
ORDER BY PubDate DESC
在评分较低的网站上没有问题,而且效果很好。但是在像 100000 行这样大的数据库和每天有 2000000 个单用户的网站中,它会崩溃。它在三个页面之一引发SqlTimeout 异常。因此,当我单击一个页面时,几乎所有页面都给出了上述异常。
我检查了硬件性能,处理器消耗为 I7 3.6 GHZ 的 %70,内存消耗为 1.5 GB。但是有更多的空内存。我该如何克服这个问题?
任何帮助将不胜感激。
【问题讨论】:
-
您确定在使用连接后关闭它们吗?您是否检查过您在 SQL Server 中的执行计划,看看您是否正确地利用了您的索引?
-
嗯,您是按 PubDate 搜索和排序的,为什么不也索引呢?另外,我猜
url不是唯一的列? -
@Paddy 我关闭了所有连接,我还使用 .net 分析器进行了检查。没有打开的连接。
-
@MikeSmithDev 我忘了包括唯一键。网址也是独一无二的。当我在索引中包含 PubDate 时,它会变慢。
-
@Mesut 那么为什么你有一个
ORDER BY... 如果你在查询唯一列URL之后只能返回一行?
标签: c# asp.net sql-server asp.net-mvc