我需要优化一个旧的传统sql查询,该查询由于在查询执行期间数据库服务器上缺少可用磁盘空间而开始失败(它使用20 Gig用于临时表并退出错误)。取决于字段值的数据聚合
查询有点复杂,因为它根据查询表中某个字段的值将数据聚合到不同的别名中。主要想法是使用选项组查询表并为结果表的别名列创建值。
模式样本和查询在这里:http://sqlfiddle.com/#!9/64e86/2/0。在真正的查询中,IN
子句中有10-12个opt_types。
问题是,它就像两个表中的2.5kk行和18.5kk行。
对于较小的数据量(70k和750k),此查询运行良好并且时间很短。
任何想法如何改善这个查询,使其运行在大量的数据? 数据库是MySQL 5.6。查询通过bash脚本使用本机mysql < query_file.sql
命令填充到服务器。
PS安静坦率地说,我不是很喜欢了解此查询是如何工作的(准确的说,使用该部分GROUP_CONCAT(DISTINCT IF(...) ORDER BY ... ASC SEPARATOR ', ')
)
什么是'2.5kk'?百万? –
也把所有的问题也放在这个问题上。链接中断。特别是SQLFiddle。 –