【发布时间】:2017-05-16 09:27:57
【问题描述】:
假设我有一张包含以下数据的表格:
现在我想按主键部门和号码进行过滤。我有一个必须在代码中过滤的部门和号码组合列表。 在我看来,我会创建一个连接,结果如下:
select * from employee e
inner join dynamicTable dyn on e.Department = dyn.Department
and e.Number = dyn.Number;
dynamicTable 是我的 C# 代码中的 List,它具有要过滤的主键,但我不知道如何将此列表传递到数据库级别。
我不想从员工表中加载所有内容并通过 linq 或其他方式在代码中进行过滤,因为我的数据库中有数百万员工。
我已经考虑过合并 primary_keys 并创建一个 where in (...),但 firebird 限制在 where in 中最多 1500 条记录。
使用的数据库是 Firebird 2.1 版
【问题讨论】:
-
“我的数据库中有数百万员工。” - 作为一个有趣的问题,你的数据库文件有多大,你有多少表。
select count(*) from RDB$RELATIONS where rdb$relation_type=0 and ( rdb$System_flag is null or rdb$System_flag=0 )也许你真的会考虑升级FB... -
我有 92 张桌子,其中有几张桌子有大量的行。这是因为有许多支付交易和用户操作需要保存和评估...更新 FB 并不容易,因为有近百个客户端使用 2.1 版本,更新意味着测试!但是更新有什么好处呢?
-
和文件大小?根据 www.translate.ru -> ibase.ru/profitmed FB 2.5 的索引和通用 I/O 更快,这应该有利于那些非常“长”的表。 FB 3.0 可能会更好,但我个人确实怀疑它的打磨程度。此外,2.5 制作了更多的监控表并引入了跟踪 API 来调查瓶颈。见 2.5 相关注释。 2.1 客户端通常可以在不做任何更改的情况下与 2.5 服务器一起使用,但不建议这样做。所以如果你有一台服务器,那么也许在测试之后你可以只做一个切换,然后慢慢拉起客户端。
-
让 interbase/firebird 通过公共网络的典型解决方案是 ZeeBeDee - 但是这要求连接至少是稳定的。它加密、压缩,但在连接经常断开/恢复时不适用于类似移动的网络。坦率地说,对于预定的同步,我宁愿制作像加密的 xxxx.json.7z 这样的增量文件,然后通过任何传输方式传输这些文件。不希望使并非总是可预测的 WAN 条件对数据库服务器产生直接影响
-
是的,我正在制作一个同步机制,但这在每一点上都不是微不足道的,我正在为此开发一个好的架构。但是 te delta 文件的观点对我来说是新的,你的想法有什么真实的例子吗?
标签: c# sql firebird firebird2.1