数据库到C#的效率最高

时间:2015-10-20 14:20:07

标签: c# database sqlite

enter image description here

我正在使用SQLite中的上述数据库设计。目标是在尽可能短的时间内将数据加载到C#应用程序中。地址表中的记录数量可以从几百个到几个10.000个,具体取决于有多少客户(尚未集成在模型中)。最终,世界上的每个地址都应该能够在数据库中生成数百万条记录。在C#中插入数据时也应考虑这一点。我知道如果只有100条记录,它就不会那么快,但它应该尽可能快。

对于中间一行(大陆 - >地址),我想出了以下查询:

SELECT * FROM ((((Continent 
LEFT OUTER JOIN Country ON Continent.Code = Country.ContinentCode) 
LEFT OUTER JOIN SubDivision ON Country.Code = SubDivision.CountryCode)
LEFT OUTER JOIN City ON SubDivision.SubDivisionID = City.SubDivisionID)
LEFT OUTER JOIN Address ON City.CityID = Address.CityID)
ORDER BY Continent.Code ASC, Country.Code ASC, SubDivision.SubDivisionID ASC, City.CityID ASC;

方法1

此查询从单个表中的数据库中获取所有一对多信息。我在C#中插入此方法的方法是将第一行作为新数据插入。然后,每次检查最后插入的信息是否不同。如果它不同,则创建一个新对象,如果它是相同的,则使用最后一个对象,并为每个表使用它。 (每个表代表C#中的模型。)5个表将在一个步骤中“转换”为5个模型。

一切都很好但是没有关于口语,二手货币和大写字母的信息。稍后将通过查找各大洲,国家/地区列表中的索引来添加...

方法2

我正在考虑的第二种方法如下: 查询各大洲并将其插入列表中。 查询语言和货币并将其插入列表中。 使用有关语言和货币的信息查询国家/地区。这将生成重复的国家/地区记录,但如果已排序,可以通过检查它们是否已添加来密封,只需将语言和货币添加到国家/地区模型内的列表中即可。 冲洗并重复其余数据。

通过执行此操作,每次向C#插入某些内容时,都必须在列表中查找索引,因此不存在重复的对象。还必须处理多个查询以插入所有内容。

我的2种方法中的任何一种方法是否都很好还是有更好的方法?我承认我没有测试上述任何一种方法来节省编程时间,我宁愿先考虑问题,而不是尝试一些事情并意识到它不起作用。

1 个答案:

答案 0 :(得分:1)

您可以将每个表加载到字典中,并将PK作为键。它不会浪费内存或连接带宽,速度会非常快,可以轻松查找对象关系。问题确实是,为什么要将整个数据库镜像到您的应用程序中。