我在MySQL数据库中有3个表,我想写一个连接这3个表的csv文件。一个是master_table,另外两个是table1和table2。这是我的查询加入三个表优化在MySQL中连接3个表的性能
USE db_test;
SELECT 'feature1', 'feature2', 'feature3', 'feature4', 'feature5', 'feature6', 'feature7', 'feature8'
UNION ALL
SELECT master_table.feature1, master_table.feature2, master_table.feature3, master_table.feature4, master_table.feature5, table1.feature6, table1.feature7, table2.feature8
FROM (master_table RIGHT JOIN table1
ON master_table.feature1 = table1.feature11)
LEFT OUTER JOIN table2
ON table2.feature22 = master_table.feature2
INTO OUTFILE 'datafile.csv'
CHARACTER SET 'utf8'
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n';
此查询工作正常。我在64GB RAM和8个内核的服务器上运行它。
问题 主表有大约35万行。 table1有30万行,而table 2有大约100行。运行此查询并写入一个csv文件需要将近一个小时。我希望有一些方法可以写出比这更快的查询。我无法相信对这一小部分数据的查询需要在服务器上花费一个小时。
你有'table1.feature11'上的索引吗?你可以显示查询执行计划吗? – Thilo
带列标题的静态行是一件很奇怪的事情。为什么不只给数据列一个友好的别名(或者将演示文稿留给客户)呢? – Thilo
重要的重新设计是需要的。任何时候你有名为x1,x2,x3等的列,你都可以确定你的设计不是最优的。 – Strawberry