gpt4 book ai didi

mysql - 查询运行时间太长

转载 作者:行者123 更新时间:2023-11-30 22:09:36 24 4
gpt4 key购买 nike

我正在运行以下查询,以根据同一表中的日期字段检索唯一的最新结果。但是当表在增长时,这个查询会花费太多时间。欢迎提出任何改进建议。

select
t2.*
from
(
select
(
select
id
from
ctc_pre_assets ti
where
ti.ctcassettag = t1.ctcassettag
order by
ti.createddate desc limit 1
) lid
from
(
select
distinct ctcassettag
from
ctc_pre_assets
) t1
) ro,
ctc_pre_assets t2
where
t2.id = ro.lid
order by
id

我们的 able 可能多次包含同一行,但每一行都有不同的时间戳。我的对象基于单个列,例如 assettag 我想为每个具有最新时间戳的 assettag 检索单行。

最佳答案

找到每个 ctcassettag 的最新日期,然后返回以找到匹配的整行,这更简单,而且可能更快。

这确实假定没有 ctcassettag 有多行具有相同的 createddate,在这种情况下,您可以每个返回不止一行ctcassettag.

SELECT
ctc_pre_assets.*
FROM
ctc_pre_assets
INNER JOIN
(
SELECT
ctcassettag,
MAX(createddate) AS createddate
FROM
ctc_pre_assets
GROUP BY
ctcassettag
)
newest
ON newest.ctcassettag = ctc_pre_assets.ctcassettag
AND newest.createddate = ctc_pre_assets.createddate
ORDER BY
ctc_pre_assets.id

编辑:处理具有相同日期的多行。

如果在同一 createddate 上有多个行用于同一 ctcassettag,您实际上还没有说明如何选择您想要的行。因此,此解决方案只是从那些 duplicates 中选择具有最低 id 的行。

SELECT
ctc_pre_assets.*
FROM
ctc_pre_assets
WHERE
ctc_pre_assets.id
=
(
SELECT
lookup.id
FROM
ctc_pre_assets lookup
WHERE
lookup.ctcassettag = ctc_pre_assets.ctcassettag
ORDER BY
lookup.createddate DESC,
lookup.id ASC
LIMIT
1
)

这仍然使用相关子查询,它比简单的嵌套子查询慢(例如我的第一个答案),但它确实处理与“重复”。

您可以通过更改相关子查询中的 ORDER BY 来更改选择行的规则。

它也与您自己的查询非常相似,但少了一个连接。

关于mysql - 查询运行时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40525660/

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