作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我使用下面的查询来选择电影年龄最小的 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 索引:
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/
我是一名优秀的程序员,十分优秀!