我在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