我有一个相当大的数据库,其中包含多个表和复杂的关系以及数千条记录。只是为了简化问题,假设我有一个 MySQL 数据库,如下所示:
[表格1]
- ID
- table2_id
- table3_id
- name_id
[表2]
- ID
- name_id
[表3]
- ID
- name_id
[姓名]
- ID
- 文本
然后是关系:
- table1.name_id -> name.id
- table1.table2_id -> table2.id
- table1.table3_id -> table3.id
- table2.name_id -> name.id
- table3.name_id -> name.id
表格包含:
- 表 1 中有 50,000 条记录
- 表 2 中有 10,000 条记录
- 表 3 中有 5,000 条记录
- 25,000 条记录
我需要在显示列文本名称的 DataGridView 中显示 table1。
我需要将过滤器应用于每个 table1 请求,其中我可以为每个表包含名称搜索关键字:table1、table2、table3。
我一直在尝试使用 DataAdapters 手动填充 DataSet 并添加 DataRelations 并发现一些问题:
- 让 DataSet 充满所有数据需要很长时间和大量内存。显然我不需要一次所有的东西,如果我可以将 table1 限制为 5,000 条记录并应用过滤器,我会很高兴
- 考虑到 DataAdapters 和 DataSets,我无法设法将 WHERE 条件设置为子行以检索过滤后的 table1 数据 - 例如:我想获取 table1 的列表,其中 table2 name text = "a" and table3 text = "b"
我真的不想构建'SELECT ... LEFT JOIN'或'SELECT ....table1,table2,table3'查询,就像我之前提到的那样,我处理超过6个具有嵌套关系的表(例如,相关的表与另一张表相关等)
我不想检索所有 table1 记录,然后像我之前所说的那样在 C# 端过滤它们 - 这需要很长时间,并且不需要在屏幕上显示所有记录。必须仅根据过滤记录来考虑所有记录,然后结果可以限制为 5,000 项。
我了解在这种情况下使用 DataSet 和 DataAdapters 可能是错误的。任何其他想法都非常受欢迎,我相信也会有所帮助。谢谢你。
有人可以指出我正确的方向吗?