随着我不断添加行,SQL Server 2005变慢了

Bil*_*one 2 vb.net sql-server performance sql-server-2005

作为前言,我是使用SQL Server 2005的新手; 我知道如何使用SELECT,UPDATE,DELETE和INSERT命令以及它的相关信息.我也在我的本地PC上使用Express Edition(在RAID 1中使用E8400处理器,8GB DDR2-800,2 x 640GB SATA-II HDD)

我有一个表,我设置了8列,都是NVARCHAR(最大),我允许Null.我在概念上知道什么是主键,但我没有主键(我也不知道如何设置一个).

我正在研究的我的VB.NET程序是从雅虎下载历史股票价格图表,用于存在的每个股票代码.我添加的前50,000行是超快的.然后我去睡觉了,当我醒来的时候它还在运行 - 但是增加行的速度已经减缓了waaaaaay的速度; 我注意到这一行在300,000左右.我总是期望行添加的速率随着时间的推移而保持不变,但显然不是这样!

从浏览其他Stack Overflow问题开始,我怀疑我的减速与我的贫困表设置有关.如果是这种情况,我应该从哪里开始解决这个问题,是否有任何好的资源我可以开始阅读?我希望这很简单,我可以解决:)

如果重要,这就是我添加行的方式:

cmdtext = "IF NOT EXISTS(SELECT DateStamp FROM DailyPrice WHERE (DateStamp = '" +     datestamp + "' AND Ticker = '" + ticker + "')) INSERT INTO DailyPrice (Ticker,OpenPrice,ClosePrice,HighPrice,LowPrice,AdjustedClose,Volume,DateStamp) VALUES('" + ticker + "','" + openprice + "','" + closeprice + "','" + highprice + "','" + lowprice + "','" + adjustedclose + "','" + volume + "','" + datestamp + "')"
                cmd = New SqlCommand(cmdtext, conn)
                howmanygotinserted = cmd.ExecuteNonQuery
Run Code Online (Sandbox Code Playgroud)

我为CSV文件的每个臭味行重复一遍,每个CSV文件大约有30,000行(我有超过5000行).

Mar*_*ers 7

有8列,都是NVARCHAR(最大)

这是你的第一个问题.如果您告诉他们您拥有什么类型的数据,并选择适用于您的数据的最小数据类型,数据库最有效.NVARCHAR(Max)是您可能做出的最低效的选择.

我没有[主键](我也不知道如何设置一个).

那是你的第二个问题.在每个插入上,您要检查是否已经插入了与某些列的另一行具有相同值的行.因为您没有告诉数据库索引这些列,所以每次都必须检查整个表,因此随着表的增长,查询会变得越来越慢.要将主键添加到现有表,可以使用以下命令:

ALTER TABLE table1 ADD CONSTRAINT pk_table1 PRIMARY KEY (Ticker, DateStamp)
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参见此处