需要长期和动态选择查询/查看sqlite

时间:2012-08-02 21:43:52

标签: sql performance sqlite qt database

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

我最初开始建立一个类,以使这更可忍受,但后来停止想知道这是否会运作良好。这个查询将会破坏一个可能有数百万行的表,再加上另外两个包含数千行的表。

由此产生了许多问题:

1。)我想使用这些语句生成临时视图,以便我可以轻松地在现有代码库上进行传输,这里的重点是我想根据GUI中的选定参数过滤我已经关闭的数据进行分析,那么在这种情况下视图会有多糟糕呢?

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

3。)除了使用字符串连接之外,是否有一个框架可以使生成此查询更容易?

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

编辑:

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

所以似乎完成我原本想要的唯一方法是

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

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

我最终编写了一个围绕QSqlQuery对象的包装器,它将使用索引>遍历表。变量和限制允许“走”表。

1 个答案:

答案 0 :(得分:0)

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