gpt4 book ai didi

MySQL - 提高慢速子查询的性能

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

我有一个大型赛马结果数据库。普通查询运行起来非常快,但是当使用子查询时,性能非常慢,以至于不可行。

子查询的目的是在比赛日期之前确定给定马匹的成绩。因此就有了 where 子句。

我想提高性能,据我了解,使用联接要快得多,但我无法让它成功工作。

我很想知道如何加入这个特定的查询?

很抱歉没有添加 SQL Fiddle,但是所需的数据量(即使对于示例而言)也太大了。

select date, raceref, horse, rank, 

(
SELECT ifnull(count(raceref),0)
FROM results
WHERE horse = t.horse
AND date < t.date
) AS totalracesprior,

FROM results t
group by horse, raceref
order by raceref, horse

解释的输出:

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1 PRIMARY t ALL NULL NULL NULL NULL 110088 Using where; Using temporary; Using filesort
2 DEPENDENT SUBQUERY results ALL NULL NULL NULL NULL 110088 Using where

索引:

Table   Non_unique  Key_name    Seq_in_index    Column_name Collation   Cardinality Sub_part    Packed  Null    Index_type  Comment Index_comment
results 0 PRIMARY 1 id A 110088 NULL NULL BTREE

最佳答案

是否有多个行具有horse、raceref相同组合?如果是这样,GROUP BY horse,raceref 将无法按预期工作。

如果没有重复项,则去掉GROUP BY;它增加了工作量而不改变结果。

我推荐两个索引:INDEX(horse, date)对于子查询很有用。如果没有 GROUP BYINDEX(raceref, horse) 对于 ORDER BY 很有用。如果您交换了其中的顺序,它对于 GROUP BY 也很有用。

关于MySQL - 提高慢速子查询的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37648198/

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