mysql - MySQL - 连接 3 个表的效率极低且不可靠的查询 - 如何改进?
问题描述
我在 DigitalOcean 机器上使用带有 INNODB 引擎的 MySQL。该机器具有 4GB 内存、80GB 磁盘和 2 个 vCPU,并在 Ubuntu 16.04 上运行。
我们有一个查询,它连接了三个运行非常缓慢的表(如果可以正常运行,大约需要 5 分钟才能返回)。表的大小分别为600 万行、2000 万行和 10 万行,表中每行都有唯一索引。
查询如下所示:
SELECT *, table2.column1
FROM table1
INNER JOIN table2 on table1.column1 = table2.column1
INNER JOIN table3 on table1.column2 = table3.column1
WHERE table3.column2 == "{ID}";
我们希望将此查询嵌入到数据处理/分析管道中,该管道将相关数据动态拉入内存,然后使用 R 运行进一步分析。为此,我们需要使此查询 [或执行相同操作的替代方法] 运行方式更有效。
有没有人知道如何使这个查询更有效率,或者这种放缓的原因可能是什么?任何帮助将不胜感激,
非常感谢!
解决方案
对于此查询:
select table1.*, table2.column1
from table1 inner join
table2
on table1.column1 = table2.column1 inner join
table3
on table1.column2 = table3.column1
where table3.column2 = "{ID}";
你想要索引:
table3(column2, column1)
table1(column2, column1)
table2(column1)
推荐阅读
- ruby-on-rails - 部署后 FileNotFound
- ruby - 用 Ruby 编写迭代器,无法正确使用空格
- web-services - 无法将 AWS EC2 上托管的 REST 服务访问到本地 WAMP 服务器
- xcode - Xcode 测试失败并没有失败 Github 操作管道
- c# - “T”不包含“Foo”的定义,最好的扩展方法重载需要“IType”类型的接收器
- asp.net-core - ASP.NET Core 中的服务总线
- c# - 检查应用程序路径中的文件 -> 始终返回 false
- ruby - 找不到中间人命令/捆绑器不工作
- html - 如何使用 HTML 和 CSS 来创建倾斜的导航栏设计?
- angular - 当我尝试使用带有 Angular 应用程序的 ckeditor5 构建生产版本时出现错误