如何从1000万行的数据表中获取不同的行?

时间:2013-07-03 12:59:16

标签: c#

我正在从XML文件中读取数据,而我的xml文件包含超过1000万行。 我的XML文件包含重复的行。我希望从xml中区分出行并将其插入数据库。

我试过用: string myXMLfile = System.Configuration.ConfigurationSettings.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");

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");

但这种方法需要很多时间。获取不同行的任何其他方法?

4 个答案:

答案 0 :(得分:3)

如果数据库是基于SQL的,则可以使用SELECT DISTINCT。这将比你在c#中做的任何事情都快得多。

编辑:你真的没有什么可以做的。如果能够切实可行,切换到嵌入式DBMS(如SQLite)是最佳选择。

答案 1 :(得分:1)

将从XML文件读取的行插入数据库中的临时表。如果您的数据库支持批量复制,请使用批量复制。

然后使用SELECT DISTINCT从临时表转移到目标表。

答案 2 :(得分:1)

拥有1000万行数据,您需要使用数据库而不是text / xml文件来存储数据。我担心你没有太多办法可以加快一个过程,这个过程取决于读取整个文件,然后立即读入内存然后进行扫描。最好重新考虑您的架构。

我会先将所有行放入数据库,如果只是一个临时表,然后在那里重复删除并插入到最终表中;使用真实数据库提高性能的更多机会。

答案 3 :(得分:0)

SQL语句将是最快的路径。类似的东西:

USE database_name;
GO
SELECT DISTINCT column_name
FROM table_name