使用 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 保存在数据库的过滤表中。我这样做是因为:
- 使用动态生成的
IN
过滤器生成SELECT
查询非常丑陋且非常不实用。 - 我可以在需要使用过滤器窗口的所有查询中加入该表。
可能不是目前最好的解决方案,但提供了服务,并且仍然非常适合我。
关于c# - 如何通过主键获取大量数据库表记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3734850/