我正在使用Google SQL Cloud(MySQL 5.5 w / 4GB ram)合并两个数据集,每个数据集大约有1M行,运行时间超过5小时。我从Sequel Pro运行以下查询:
create table newtable as (select * from table1 t1 left join table2 t2 using (key))
每个表大约有20个VARCHAR列。 Key也是VARCHAR。
我在两个表中都创建了一个键的索引,但这并没有真正改变性能。我搜索了很多,但找不到任何关于如何改善查询时间的直接建议。这是MySQL的预期查询时间吗?
编辑:每张表约250MB
答案 0 :(得分:3)
我注意到的第一件事是你的KEY被设置为VARCHAR。这可能是您遇到的性能不佳的主要原因。这可以通过添加自动递增的Integer PRIMARY KEY来改进。由于'table1'中每百万个KEY值的每个字符串与'table2'中的每个百万个KEY值进行单独比较,因此这会产生一个性能非常高的任务,通过每个字符中的每个字符之间的比较更是如此。的字符串。由于使用Integers是一个简单的价值比较值,因此它的影响要小得多。
由于您的实例存在物理硬件限制,您的Cloud SQl实例的层大小也会对性能产生很大影响。您可以临时更改实例的层,以在Cloud SQL用户界面的“编辑”部分或使用Cloud SDK进行测试。
答案 1 :(得分:0)
听起来很傻你可能会更好运用mysqldump导出你的表,更改表名,然后重新导入它。