gpt4 book ai didi

mysql - 加速 : query with a GROUP BY

转载 作者:可可西里 更新时间:2023-11-01 08:29:38 25 4
gpt4 key购买 nike

我使用下面的查询来选择电影年龄最小的 Actor 。

SELECT production_cast.production_id, MIN(birthdate) FROM person
LEFT JOIN production_cast ON production_cast.person_id = person.id
WHERE birthdate IS NOT NULL
GROUP BY production_cast.production_id;

然而 IMDB 数据集非常庞大,需要 300 多秒才能完成。如果没有 GROUP BY 和 MIN,此查询将在 0.2 秒内完成:

SELECT production_cast.production_id FROM person
LEFT JOIN production_cast ON production_cast.person_id = person.id
WHERE birthdate IS NOT NULL;

数据库引擎是 MyIsam。 Mysql版本是5.7.2。我尝试在以下位置使用这些 BTREE 索引:

  • production_cast.production_id
  • 人.生日
  • person.birthdate 和 person.id
  • production_cast.id 和 production_cast.production_id

explain 的简短输出是:范围,索引:idx_Person_id_birthdate、idx_Person_id_birthdate、额外使用where;使用索引;使用临时的;使用文件排序

Production_cast:引用,索引: idx_Production_cast_person_id_production_id额外:使用索引

person.id 和production_cast.id 是主键索引。 production_cast.production_id 不是主键但有索引。我可以做些什么来提高这个搜索查询的速度。

最佳答案

您可以添加一些索引来加速数据检索。

production_cast 上:

  • person_id
  • id

关于:

  • id
  • 生日

这样,数据库不需要检索所有数据,只需检索索引中的数据。此外,索引列的顺序将加快检索速度。您还应该将 person.birth_date 列别名为解析时间下降:

SELECT pc.id
, MIN(p.birthdate)
FROM person p
LEFT
JOIN production_cast pc
ON pc.person_id = p.id
WHERE p.birthdate IS NOT NULL
GROUP
BY pc.id;

关于mysql - 加速 : query with a GROUP BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30529045/

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