c# - 如何通过主键获取大量数据库表记录?

标签 c# mysql ado.net select primary-key

使用 ADO.NET MySQL 连接器,通过主键获取大量记录(1000 条以上)的好方法是什么?

我有一个只有几个小列和一个 VARCHAR(128) 主键的表。目前它有大约 10 万个条目,但将来会增加。

一开始,我想我会使用 SQL IN 语句:

SELECT * FROM `table` WHERE `id` IN ('key1', 'key2', [...], 'key1000')

但是有了这个查询可能会变得很长,而且我还必须手动转义键等中的引号字符。

现在我使用 MySQL MEMORY 表 (tempid INT, id VARCHAR(128)) 首先使用准备好的 INSERT 语句上传所有键。然后我进行连接以选择所有现有键,之后我清理内存表中的困惑。

有更好的方法吗?

注意:好吧也许将字符串作为主键不是最好的主意,但如果 VARCHAR 列是普通索引,问题将是相同的。

临时表:到目前为止,似乎解决方案是将数据放入临时表,然后 JOIN,这基本上是我目前所做的(见上文)。

最佳答案

我在薪资系统中处理过类似的情况,用户需要根据选择的员工(例如员工 X,Y,Z... 或在某些办公室工作)。我已经建立了一个过滤窗口,其中包含所有员工和所有可被视为过滤条件的属性,并让该窗口将选定的员工 ID 保存在数据库的过滤表中。我这样做是因为:

  1. 使用动态生成的 IN 过滤器生成 SELECT 查询非常丑陋且非常不实用。
  2. 我可以在需要使用过滤器窗口的所有查询中加入该表。

可能不是目前最好的解决方案,但提供了服务,并且仍然非常适合我。

关于c# - 如何通过主键获取大量数据库表记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3734850/

相关文章:

c# - 单元测试私有(private)代码

c# - 找不到存储过程 dbo asp net 检查架构版本 LOCALHOST

c# - 通用表达式树,每个提供的属性都有 'OR' 子句

c# - 在 c#/html 上使用 Entity Framework 时如何将多个参数传递给 Actionlink()

mysql - 根据另一个表的条件更新表,包括函数

mysql - 在 php mysql_fetch_array() 和 mysql_fetch_row() 中不在同一个变量上工作

sql - 从事务中的 SQL 批处理中止错误中恢复?选择?

python - datetime => timestamp 的差异仅在某些情况下?

c# - 为什么我尝试插入时出现 "Must declare the scalar variable "@rollnum""错误?

c# - 连接后ConnectionString丢失密码.Open