gpt4 book ai didi

sqlite group-by 与 sort-by-desc 无法按预期工作

转载 作者:行者123 更新时间:2023-12-02 13:53:55 32 4
gpt4 key购买 nike

我有一个正确索引的聚合查询,可以快速返回有序结果(简单索引扫描)。当排序为升序 (ASC) 时,这会按预期工作,但反转顺序 (DESC) 会导致 sqlite 创建 TEMP B-TREE

sqlite版本3.26.0

CREATE TABLE t1(x,y);
INSERT INTO t1 VALUES(1,1);
INSERT INTO t1 VALUES(1,2);
INSERT INTO t1 VALUES(2,1);
CREATE INDEX ix1 ON t1(x,y);

EXPLAIN QUERY PLAN SELECT x,max(y) FROM t1 GROUP BY x ORDER BY x;
EXPLAIN QUERY PLAN SELECT x,max(y) FROM t1 GROUP BY x ORDER BY x DESC; -- This query constructs a TEMP B-TREE, why?

运行上面的代码时,您将看到查询 1 只是运行索引扫描,而查询 2 除了运行索引扫描之外,还创建一个 TEMP B-TREE 来对结果进行排序,从而破坏了性能。

创建的索引支持双向遍历,因此我希望 ASC 和 DESC 排序具有相同的性能。

这是 sqlite 和聚合中的已知限制,还是我期望/做错了什么?

最佳答案

用于循环索引的代码仅在需要时才向后执行。对于实现 GROUP BY 本身,永远不需要向后返回,因此从未尝试过。

针对您在 sqlite-users 邮件列表上的报告,SQLite 版本 3.30.0 will have code处理这种情况:

    /* The GROUP BY processing doesn't care whether rows are delivered in
** ASC or DESC order - only that each group is returned contiguously.
** So set the ASC/DESC flags in the GROUP BY to match those in the
** ORDER BY to maximize the chances of rows being delivered in an
** order that makes the ORDER BY redundant. */

关于sqlite group-by 与 sort-by-desc 无法按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58009898/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com