我有一个T-sql存储过程,它将数百万条记录插入到SQL Server表中。我有2个选项来执行此存储过程
哪一个会执行得更快,并提供更好的性能?
(通过评论) SP将CSV文件加载到SQl 2000数据库中。计划使用SSIS 2005将csv迁移到sql 2000表,那么哪种方法会更好
答案 0 :(得分:3)
您还可以使用.NET库调用存储过程,从命令行(OSQL,SQLCMD等)调用它,在SQL Agent作业中启动它,但调用程序无关紧要。
最终,SQL Server数据库引擎将收到您要运行存储过程的请求,对于相同的参数,无论调用者如何,它都将使用相同的查询计划。
如果您正在观察差异,请查看Erland的文章:Slow in the application, Fast in SSMS
所以,你真正的问题似乎是关于加载CSV。无论如何启动,您的存储过程方法仍应提供相同的性能。只要你有一个固定的CSV文件(你没有尝试编写通用导入 - 任何东西),你可以通过使用实际的Data Flow Task
来获得更好的性能。排除故障肯定会更容易。
对于一些未经提出的建议,如果您刚刚开始退出SQL Server 2000,请跳过2005并前往SQL Server 2008 R2。 SQL Server end of life已经发生在2000年。2005年将在2016年到期。许可成本的变化应该不会很差,从2000年到2008年R2的迁移不应该是坏事。 2012年,这将花费相当多的钱。可惜,因为它是一种美丽。
答案 1 :(得分:2)
如果服务器上安装的BIDS是32位且服务器本身是64位,那么可能会有区别。
从SSIS包运行然后将使用32位 - 这也设置了它可以使用的最大RAM的限制。
同时,当您运行与服务器作业相同的包时,它将使用64位可用的所有内存。这基本上适用于数据流,但是MIGHT也会对SQL任务产生影响。