我有3个存储过程AddProduct
,AddProductProperties
和AddOffer
。
我需要使用此过程从数据库中的各种数据源导入数据。数据源的结构是可变的,因此它可能只包含产品或产品或两者。
我的算法是从数据源读取记录然后调用必要的过程。
要调用程序,我使用MySqlCommand
参数。
问题:
MySqlCommand
个对象并仅更改参数
或者没关系? 答案 0 :(得分:2)
两个建议:
在MySqlCommand上使用Prepare方法
MySqlCommand类上有一个Prepare方法。如果你必须重复调用这些存储过程,那么我会使用它来尝试最小化每次执行必须完成的工作量。以下是我认为可能涉及的步骤:
设置命令对象(每个存储过程一个),包括任何必要的参数。
打开与数据库的连接
为每个命令调用一次
迭代您的数据
4.1。根据您的数据更新命令参数的值
4.2。在命令的
我不确定你会从中获得多少性能优势。
如果您正在执行ad-hoc语句而不是程序(或者甚至是程序),那么我认为需要注意的一个重要事项是使用参数而不是简单地将值连接到命令文本中。如果您使用字符串连接方法,我认为在大多数情况下通常都是一个坏主意,那么您可能无法利用Prepare方法,因为您必须为每次执行修改命令。 / p>
是否有可用的BulkInsert / BulkCopy选项?
我对MySQL不像SQL Server那样熟悉; ADO.Net具有批量复制功能,可用于将大量数据插入SQL Server。我不知道MySQL是否有类似的功能,但是如果它有并且你要插入大量数据,那么考虑使用它而不是重复调用存储过程。
答案 1 :(得分:0)
速度和对插入物的单独调用就像油和水。 (哦,这些时候不是一个好的陈述)。
Delete from temp2 where temp2.id in (select id from temp1)或者在导入之前使用simliar。
一旦我甚至摇摆了这样的东西,文件中的冲突项目必须覆盖以前的项目,包括来自外部平面文件的builk update / insert / delete查询和临时表。发了5个超级丑陋的sql语句。不是很有趣,但比插入的同一个盒子上的代码快100倍。哪个是单个SP进行插入的类型(好吧也许不是那么糟糕,它是vb4并访问jet2.0 :-)。但是,由于往返等原因,网络客户端会做WORSE。
您还可以通过多记录SQL更新来治愈癌症。