sqlite union all 优化

Posted

技术标签:

【中文标题】sqlite union all 优化【英文标题】:sqlite union all optimization 【发布时间】:2013-03-21 03:27:19 【问题描述】:

我有一个如下所示的 sqlite DB 查询:

SELECT
    origin,
    destination,
    weight,
    rate,
    0 as group
    from groupAZones, groupARates
    where
    tms = groupZone

union all

SELECT
    origin,
    destination,
    weight,
    rate,
    1 as group
    from groupBZones, groupBRates
    where
    tms = groupZone

    union all

SELECT
    origin,
    destination,
    weight,
    rate,
    2 as group
    from groupCZones, groupCRates
    where
    tms = groupZone

    union all

SELECT
    origin,
    destination,
    weight,
    rate,
    3 as group
    from groupDZones, groupDRates
    where
    tms = groupZone

有没有好的方法来优化这样的查询?我正在尝试创建一个结合这 4 个表的简单视图。将此用作视图查询,对视图的查询大约需要 13 秒。

我尝试为 4 个表创建索引,但似乎没有帮助。

我在 SQL 方面是个新手,我知道足够做简单的事情,但我仍在学习高级技巧。

任何指针或信息都会有所帮助。

【问题讨论】:

你要处理多少数据? 如果我使用相同的查询构建一个表,它可以计算出大约 450 万条记录和大约 125 MB 的磁盘空间。 为此查询显示EXPLAIN QUERY PLAN 的输出。 CL 这个命令实际上让我发现我的两个索引没有被使用!修复索引后,查询现在非常快。谢谢你的协助!我对你的评论投了赞成票。 【参考方案1】:

CL 指出我应该运行EXPLAIN QUERY PLAN 命令。这导致发现 4 个索引中有两个没有被使用。

谢谢 CL!

我仍然想知道是否有更好的方法来执行该查询,但现在它正在做我需要它做的事情。

【讨论】:

以上是关于sqlite union all 优化的主要内容,如果未能解决你的问题,请参考以下文章

SQLite:如何优化 UNION 查询

水平 UNION ALL

SQLite:尝试以比 UNION 字符串更优雅的方式连接列

SQLite3 使用 LEFT JOIN 和 UNION 模拟 RIGHT OUTER JOIN

是否应该在 SQLite 中使用 GROUP BY 在 UNION 上进行 INNER JOIN 花费数小时?

SQLite:n个地方的UNION ORDER BY size连同所有的大写字母?