在SQLite数据库中使用临时表

时间:2011-07-15 07:08:04

标签: android sqlite temp-tables

我正在浏览Martin Eve的Mendeley for Android源代码,看到Temp表与主表一起创建,通过使用_id调用表上的replace。例如,在集合表

db.execSQL(COLLECTIONS_CREATE.replace(" (_id", "_TEMP (_id"));

我猜它会创建一个新的临时表。对此的任何更多解释都会很棒。此外,数据首先插入临时表,然后移动到主表。

我搜索了SO并遇到What are the use cases for temporary tables in SQL database systems?并看到临时表用于处理复杂查询,排序和提高性能。任何人都可以解释它在这种情况下有何帮助吗?

2 个答案:

答案 0 :(得分:3)

临时表只是暂时的。一旦你关闭连接,它们就会消失,至少是sqlite。它通常比其他DMBS更复杂,虽然这通常是默认行为。

因此,只要需要临时表,就会使用临时表! (开玩笑而已')。性能会更好,因为不涉及I / O(这通常是数据库性能问题的原因)。

另一个用例是当你想要使用永久表中的内容而不改变所述表中的任何内容时;然后,您可以在临时表中选择永久表,并保持永久表的完整性。

答案 1 :(得分:3)

临时表通过让程序员将单个复杂查询分解为多个相对简单的查询,并且让程序员暂时存储结果,以便在程序期间可以多次查询它们以用于不同目的,从而使程序员更容易。该程序无需每次都重新实例化。后者也使计算机更容易。可以这么说,磁盘子系统和CPU可以稍作休息。

前者的一个例子:假设您想要获取所有记录:

                    the sale was in the eastern division
                    and involved one of the several new gizmos introduced last quarter
                    and occurred during the special 5-day bonanza sale

                    or

                    the sale was made by the boss's daughter
                    who floats from division to division
                    and the sale occurred at any time during the month of May

然后,您的程序将生成一封电子邮件,称赞销售人员进行销售,并向部门经理提供cc。

获取满足上述任何一组条件的记录的单个查询可能会变得有点笨拙 - 对于一个人厌倦的大脑或疲惫的眼睛在经过漫长的一天处理这种废话之后会有点难以处理必须在大多数人的生活中处理。当然,这是一个微不足道的例子;在生产系统中,条件通常比上述条件更复杂,包括空值的计算和测试以及可能导致查询语句长时间变长并变成缠结纱线的各种其他繁琐事物。

因此,如果您创建了临时表,则可以使用满足第一组条件的行填充临时表,然后编写第二个查询来抓取满足第二组条件的行,并将它们插入到临时表,瞧 - 你的临时表包含你需要处理的所有行,分两个步骤。