小编Mar*_*tin的帖子

如何在大表上使用 LEFT JOIN 优化非常慢的 SELECT

我在谷歌上搜索、自我教育和寻找解决方案几个小时,但没有运气。我在这里发现了一些类似的问题,但不是这种情况。

我的表:

  • 人(约 1000 万行)
  • 属性(位置,年龄,...)
  • 人员和属性之间的链接 (M:M)(约 40M 行)

完全转储 ~280MB

情况: 我尝试person_id从某些位置 ( location.attribute_value BETWEEN 3000 AND 7000) 中选择所有人员 ID ( ) ,具有某种性别 ( gender.attribute_value = 1),出生于某些年份 ( bornyear.attribute_value BETWEEN 1980 AND 2000) 并且具有某种眼睛颜色 ( eyecolor.attribute_value IN (2,3))。

这是我的查询女巫花了3~4 分钟。我想优化:

SELECT person_id
FROM person
    LEFT JOIN attribute location ON location.attribute_type_id = 1 AND location.person_id = person.person_id
    LEFT JOIN attribute gender ON gender.attribute_type_id = 2 AND gender.person_id = person.person_id
    LEFT JOIN …
Run Code Online (Sandbox Code Playgroud)

mysql performance optimization eav query-performance

25
推荐指数
2
解决办法
10万
查看次数