2

我计划为 SQLite 生成查询,这将涉及 12 个表上的许多连接,这些连接将超过 SQLite 中的 64 个表连接限制。(约 250 个表连接或可能更多)这最终将在 android 上运行。这背后的目的是根据正在生成的报告在结果集中拥有 X 数量的用户定义字段。

不幸的是,我不是 DBA,我不知道实现这一目标的最佳方法。

到目前为止,我认为选项是:

  • 使用 2 个临时表来处理结果集,同时尽可能多地加入。(我之前在 SQLServer 中的解决方案,相当慢)
  • 生成几列的结果集和一个键来连接并将它们存储在n临时表中。(其中n小于 64)然后在它们的公共键上加入所有临时表。
  • 创建一个临时表并一次填充一个插入或更新。
  • 不要进行大连接,而是执行许多选择并填充某种数据容器。

还有什么我应该考虑的吗?

4

3 回答 3

3

当您尝试加入那么多表时,我认为您无法在任何关系数据库平台上获得“快速” - 任何类型的内置优化都会放弃幽灵。当我在一个查询中看到多达十个表时,我可能会审查我的设计。

我认为您的架构设计需要重新审视。模式中的 250 多个表(在手机上!)对我来说没有意义 - 我在一个包含 200+GB 数据的数据库中运行多个企业应用程序,但仍然只有 84 个表。而且我从不加入他们所有人。你所有的表都有不同的列吗?真的不一样吗?你能发布一些来自的条目sqlite_master吗?

于 2011-05-05T17:01:52.603 回答
3

根据您对 Mike 回复的评论,“生成报告的查询需要多次加入和重新加入”。

通常,在处理报告时,您会希望将查询拆分为小块,并将中间结果存储在适用的临时表中。

此外,您的问题听起来像是您拥有实体/属性/价值存储并试图改变整个事情。如果是这样,您可能希望使用此设计反模式重新访问,因为它可能是您的问题的根源。

于 2011-05-16T13:08:35.503 回答
2

由于您的应用程序在 Android 设备上运行,我猜它与某处服务器上的企业级数据库同步。真正的解决方案是在设备数据库上生成服务器数据的非规范化表示,以便更容易访问。

于 2011-05-11T13:08:39.997 回答