首页 / C# / c# – 读取数百万条数据记录的最佳表现
c# – 读取数百万条数据记录的最佳表现
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 读取数百万条数据记录的最佳表现,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2763字,纯文字阅读大概需要4分钟。
内容图文
我有一个包含大量数据(数百万行)的数据库,并且在白天用大量数据进行更新,我还备份了这个数据库用于报告,因此获取数据报告不会影响到主数据库的性能.
为了将数据库与主数据库同步备份,我编写了一个查询主数据库并将新数据插入备份数据库的Windows服务…每次查询从主数据库获取5000行时…
编辑:
查询如下:
const string cmdStr = "SELECT * FROM [RLCConvertor].[dbo].[RLCDiffHeader] WHERE ID >= @Start and ID <= @End";
这是代码:
using (var conn = new SqlConnection(_connectionString))
{
conn.Open();
var cmd = new SqlCommand(cmdStr, conn);
cmd.Parameters.AddWithValue("@Start", start);
cmd.Parameters.AddWithValue("@End", end);
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
while (reader.Read())
{
var rldDiffId = Convert.ToInt32(reader["ID"].ToString());
var rlcDifHeader = new RLCDiffHeader
{
Tech_head_Type = long.Parse(reader["Tech_head_Type"].ToString()),
ItemCode = long.Parse(reader["ItemCode"].ToString()),
SessionNumber = long.Parse(reader["SessionNumber"].ToString()),
MarketFeedCode = reader["MarketFeedCode"].ToString(),
MarketPlaceCode = reader["MarketPlaceCode"].ToString(),
FinancialMarketCode = reader["FinancialMarketCode"].ToString(),
CIDGrc = reader["CIDGrc"].ToString(),
InstrumentID = reader["InstrumentID"].ToString(),
CValMNE = reader["CValMNE"].ToString(),
DEven = reader["DEven"].ToString(),
HEven = reader["HEven"].ToString(),
MessageCodeType = reader["MessageCodeType"].ToString(),
SEQbyINSTandType = reader["SEQbyINSTandType"].ToString()
};
newRLCDiffHeaders.Add(rldDiffId, rlcDifHeader);
}
conn.Close();
}
但是当我启动服务时…主数据库的性能变得更糟……代码效率不高?有没有更好的方法?因为我搜索并发现dataReader对于这种情况是最好的…或者我应该使用DataTable和SqlDataAdapter?
解决方法:
您无法将此视为问题的正确答案或解决方案.
由于评论很大,我正在为您提供解决方案.
您可以尝试使用Ad hoc查询的概念吗?
使用此方法,您可以使用以下方法查询另一个数据库
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;',
'SELECT GroupName, Name, DepartmentID
FROM AdventureWorks2012.HumanResources.Department
ORDER BY GroupName, Name') AS a;
阅读更多
http://technet.microsoft.com/en-us/library/ms187569.aspx
http://technet.microsoft.com/en-us/library/ms190312.aspx
由于您正在使用服务,因此服务帐户肯定有权读取主数据库并插入以报告数据库.我建议你在报告数据库中有一个SP,它可以使用OpenRowSet访问主数据库并插入它.
查询将类似于此.
Insert into tbl
SELECT a.*
FROM OPENROWSET('SQLNCLI', 'Server=Seattle1;Trusted_Connection=yes;',
'SELECT GroupName, Name, DepartmentID
FROM AdventureWorks2012.HumanResources.Department
ORDER BY GroupName, Name') AS a;
构成服务,您需要调用SP.
我们有一个类似的问题,这是由openrowset完成的,我不知道它可以提供多少性能影响.但我建议你做一个POC,然后分析一下.
请再次将此视为建议.
内容总结
以上是互联网集市为您收集整理的c# – 读取数百万条数据记录的最佳表现全部内容,希望文章能够帮你解决c# – 读取数百万条数据记录的最佳表现所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。