gpt4 book ai didi

mysql - 如何在不使用索引的情况下选择最后 N 行

转载 作者:行者123 更新时间:2023-11-29 06:12:00 26 4
gpt4 key购买 nike

我有一个查询,其中包含多个条件,用于从 500 万 行的表中提取数据。已经构建了一个复合索引来部分覆盖其中一些条件,以至于我无法使用索引来覆盖排序:

SELECT columns FROM Table WHERE conditions='conditions' ORDER BY id DESC LIMIT N;

id 本身是一个自动增量 列。由于使用了 filesort,上述查询可能会非常慢(4-5s)。通过删除 ORDER BY 子句,我能够将查询速度提高多达 4 倍。然而提取的数据大部分是旧数据。

由于可以进行后处理来对提取的数据进行排序,因此我更感兴趣的是从结果集中粗略提取数据。我的问题是,有没有办法做这样的事情:

SELECT columns FROM Table WHERE conditions='conditions' LIMIT -N;

因为我并不真正需要排序,而且我知道底部 N 行很有可能包含较新的数据。

最佳答案

给你。请记住,对任何索引列(包括 id)使用 ORDER BY 应该没有问题。

SET @seq:=0;
SELECT `id`
FROM (

SELECT @seq := @seq +1 AS `seq` , `id`
FROM `Table`
WHERE `condition` = 'whatever'
)t1
WHERE t1.seq
BETWEEN (
(

SELECT COUNT( * )
FROM `Table`
WHERE `condition` = 'whatever'
) -49
)
AND (

SELECT COUNT( * )
FROM `Table`
WHERE `condition` = 'whatever'
);

您可以将“-49”替换为以下表达式:-1 * ($quantity_desired -1);

另请查看此答案,因为它可能对您有帮助: https://stackoverflow.com/a/725439/631764

这是另一个: https://stackoverflow.com/a/1441164/631764

关于mysql - 如何在不使用索引的情况下选择最后 N 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8663908/

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