c# - 我应该执行许多 sql 查询还是一个大型查询并在服务器上进行处理?

标签 c# asp.net sql ms-access

情况如下:我有一个很大的数据集,其中包含从 Excel 文件填充的数千个条目。对于每个条目,我必须将其与数据库中某个表上的另一个字段相匹配(该表仅包含几百个条目)。

最好的方法是什么?我可以对数据集中的每个条目进行查询,但这似乎相当浪费;另一方面,我可以从表中的所有条目中选择我需要的字段,将它们放在字典或其他数据结构中,并在 IIS 上匹配它们,从而有效地只进行一个查询,但在网络服务器上进行所有处理.

数据集:约 1000 至约 3000 个条目

数据库中的表:约 300 个条目

在IIS上使用asp.net,但数据库是MS access文件。

其中一个更好吗?还有我没有想到的第三种更好的方法吗?

最佳答案

数据库的设计目的是做许多对数据处理有用的事情。事务处理的许多好处都包含在缩写 ACID 中——原子性、一致性、隔离性、持久性。换句话说,数据库的行为方式与您在其中存储内容时所期望的方式相同。数据就在那里,关系得到加强,明天就会在那里。

您想要的功能位于查询端。一般而言,数据库(尽管可能不是特别是 MS Access)允许使用相对标准的接口(interface)来进行强大的处理。数据库引擎知道如何优化查询。数据库引擎知道如何管理内存。数据库引擎知道如何管理分层内存,包括磁盘、RAM 和缓存。数据库知道如何利用索引、行分区和其他优化(您可以通过使用更高级数据库的免费版本来获得此功能,例如 SQL Server、Oracle、Postgres 甚至 MySQL)。

您正在谈论数千行数据。数据库可以轻松处理数百万行。你说的是两张 table 。数据库可以使用十几个表轻松管理更多表和查询。

所以,不,您不应该将数据加载到应用程序端的内存结构中。您应该在数据库中进行处理并返回您想要的结果。然后,您可以在应用程序端格式化结果,以利用应用程序最擅长的功能:用户界面。

关于c# - 我应该执行许多 sql 查询还是一个大型查询并在服务器上进行处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23782126/

相关文章:

c# - 数据绑定(bind) Windows 窗体控件在失去焦点之前无法识别更改

c# - .dll 引用在 Debug模式下正确加载到 c# 项目中,但在 Release模式下找不到 namespace

c# - App_Code 和服务器

asp.net - 为什么下载的文件无法保留在模型弹出窗口中?

sql - 在具有不同名称的列上连接表但在结果中产生单列

sql - FROM 子句中子查询末尾随机字母的含义 - SQL

php - Codeigniter导致mysql语法错误

c# - 既然我们有了泛型,是否还需要 EventArg 类

c# - Linq反向GroupBy

javascript - 想要使用 jqgrid 获取回车键来触发搜索