我需要生成可能有数千个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 > 变量和限制来遍历表以允许“遍历”表。