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

标签 sql-server vb.net sql-server-2005 performance

作为前言,我是使用 SQL Server 2005 的新手;我知道如何使用 SELECT、UPDATE、DELETE 和 INSERT 命令,仅此而已。我还在我的本地 PC 上使用 Express Edition(E8400 处理器、8GB DDR2-800、RAID 1 中的 2 个 640GB SATA-II 硬盘)

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

我正在使用的 VB.NET 程序正在从雅虎下载历史股票价格图表,其中包含存在的每个股票代码。我添加的前 50,000 行左右速度非常快。然后我去 sleep 了,当我醒来时它还在运行——但是行添加的速度已经减慢了 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

我对 CSV 文件的每一行都进行了迭代,每个 CSV 文件大约有 30,000 行(我有超过 5000 行)。

最佳答案

with 8 columns, all are NVARCHAR(Max)

这是你的第一个问题。如果您告诉数据库您拥有什么类型的数据,并选择适合您的数据的最小数据类型,数据库就会发挥最佳作用。 NVARCHAR(Max) 是您可能做出的最无效率的选择。

I don't have [a primary key] (nor do I know how to set one up).

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

ALTER TABLE table1 ADD CONSTRAINT pk_table1 PRIMARY KEY (Ticker, DateStamp)

参见 here了解更多信息。

关于sql-server - 随着我不断添加行,SQL Server 2005 变慢了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1983611/

相关文章:

sql-server - 如何在更新时更改日期时间字段?

sql - 查询嵌套查询结果中两列的位置

.net - Visual Basic圆形进度条

c# - 禁用多个网络连接,同时只允许一个

sql - 未获取查询中的所有记录

sql - 如何使用 sql 更新正则表达式

c# - Log4Net 不在 SQL Server 数据库中写入任何内容

java - 有没有办法从 Visual Studio Windows 窗体应用程序调用 Java 类?

sql-server - 在 SQL Server 2005 中,len() 和 datalength() 有什么区别?

sql - 使用 "with as"的输出几次