如何从具有1000万行的数据表中获取不同的行
本文关键字:获取 数据表 1000万 | 更新日期: 2023-09-27 18:20:55
我正在从XML文件中读取数据,我的XML文件包含超过1000万行。我的XML文件包含重复的行。我想从xml中区分行,并将其插入数据库。
我尝试使用:string myXMLfile=System.ConfigurationConfigurationSettings.AppSettings.Get("ReadFilePath").ToString();
System.IO.FileStream fsReadXml = new System.IO.FileStream(myXMLfile, System.IO.FileMode.Open);
DataSet dsFileRecords = new DataSet();
dsFileRecords.ReadXml(fsReadXml);
DataTable dtUniqRecords = dt.DefaultView.ToTable(true, "ID","Name");
//将数据表中的行插入数据库(dtUniqRecords)
但是这种方法需要很多时间。还有其他方法可以获得不同的行吗?
如果数据库是基于SQL的,则可以使用SELECT DISTINCT
。这将比您在c#中所能做的任何事情都快得多。
编辑:你真的无能为力。如果你能做到的话,切换到嵌入式DBMS,比如SQLite,是你最好的选择。
将从XML文件读取的行插入数据库中的临时表中。如果您的数据库支持,请使用批量复制。
然后使用SELECT DISTINCT从临时表转移到目标表中。
对于1000万行的数据,您需要使用数据库而不是text/xml文件来存储数据。恐怕你无法加快一个依赖于一次将整个文件读入内存然后扫描的过程。最好重新考虑你的架构。
如果只是一个临时表,我会先将所有行放入数据库中,然后在那里消除重复并插入到最终表中;使用真实数据库提高性能的更多机会。
SQL语句将是最快的路由。类似于:
USE database_name;
GO
SELECT DISTINCT column_name
FROM table_name