1

我需要生成可能有数千个where条件的长选择查询,例如(table1.a = ? OR table1.a = ? OR ...) AND (table2.b = ? OR table2.b = ? ...) AND....

我最初开始建立一个类以使这更容易忍受,但后来停下来想知道这是否会很好地工作。此查询将敲击一个可能有数千万行的表,并与另外 2 个具有数千行的表相连接。

一些担忧源于此:

1.)我想使用这些语句来生成一个临时视图,这样我就可以轻松地转移现有的代码库,这里的重点是我想根据 GUI 中的选定参数过滤我为分析而准备的数据,所以有多糟糕在这种情况下视图会做吗?

2.) sqlite 甚至可以解析具有数千个绑定的查询吗?

3.) 除了字符串连接之外,是否有一个框架可以更轻松地生成此查询?

4.) 将所有 WHERE 变量转储到内存中的哈希集中,然后为我的数据库查询对象编写一个包装器,next()直到遇到满足我所有条件的查询,这是更好的解决方案吗?我在这里担心的是,应用程序会在滚动上按程序生成图形,因此在调用 x 100,000 时等待绘制query.next()可能会导致烦人的延迟?理想情况下,我不想一次等待满足所有内容超过 30 毫秒的下一行。

编辑:

新问题,我注意到 sqlite3 在编译时限制为 999 个绑定值(主机参数)。

所以似乎完成我最初打算的唯一方法就是

1.)通过字符串连接生成整个查询(我最担心的是,我不知道解析sqlite3中的所有数据会有多慢)

或者

2.) 执行一揽子查询方法( select * from * where index > ? limit ?) 并调用 next() 直到我在编译的代码中找到有效数据(包括更新索引变量和重复重新查询)

我确实最终围绕 QSqlQuery 对象编写了一个包装器,它将使用 index > 变量和限制来遍历表以允许“遍历”表。

4

1 回答 1

0

考虑将没有过滤器(非规范化)的连接结果转储到平面文件中,并使用位图索引引擎 Fastbit 对其进行索引。

于 2012-08-02T23:09:16.467 回答