【问题标题】:Use of temp tables in SQLite databasesSQLite 数据库中临时表的使用
【发布时间】:2011-07-15 07:08:03
【问题描述】:

我正在浏览 Martin Eve 的 Mendeley for Android 的源代码,并看到临时表是通过在带有 _id 的表上调用 replace 来创建的。例如在 Collections 表上

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

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

我通过 SO 搜索并遇到了What are the use cases for temporary tables in SQL database systems?,发现临时表用于处理复杂的查询、排序和提高性能。谁能解释它在这种情况下有何帮助?

【问题讨论】:

    标签: android sqlite temp-tables


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      临时表通过让程序员将单个复杂查询分解为多个相对简单的查询,以及让程序员临时存储结果以便在计算过程中出于不同目的多次查阅它们,从而使程序员的工作变得更容易。程序,而不必每次都重新实例化。后者也使计算机的事情变得更容易。可以这么说,磁盘子系统和 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
      

      然后,您的程序将生成一封电子邮件,赞扬销售人员的销售,并抄送部门经理。

      获取满足上述任一条件的记录的单个查询可能会有点笨拙——只是在处理了一整天的废话之后,对于一个昏昏欲睡的大脑或疲惫的眼睛来说有点难以处理必须在各行各业处理。当然,这是一个微不足道的例子;在生产系统中,条件通常比上述条件更复杂,包括计算和测试空值以及各种其他繁琐的事情,这些事情可能导致查询语句变长并变成一团缠结的纱线。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-25
        • 1970-01-01
        • 2010-12-02
        • 2012-08-20
        • 1970-01-01
        • 2018-04-07
        • 2013-06-07
        相关资源
        最近更新 更多