我有大量的SQL日志,我想从中提取数据。这项任务需要很长时间,因为我按几列分组。因此,我决定在没有在SQL端执行GROUP BY的情况下提取日志以及我通常会分组的列。相反,我想用Perl来做我的分组。当使用Perl时,我想到的解决方案是创建一个n维散列,通过不同的列进行分组。有没有任何命令行工具或Perl函数可以让我做同样的事情?GROUP BY使用Perl
1
A
回答
2
正如Ether在评论中所说的那样,让实际为工作设计和优化的工具能够完成这项工作。运行正确优化的查询的数据库服务器不会比你自己可以在数据库之外实现的速度慢。
除此之外,您将浪费资源在网络上传输更多数据并需要更多内存。
作为优化之一,尝试使用临时表,尽管没有完整的模式和查询和数据库引擎,我不会冒险提供任何特定的优化建议。
DB外部方法有时可能会更好,例如,如果有非常少的行有重复的“分组”按键,在这种情况下,传输分组数据的资源几乎没有节省;而当你在Perl方面的逻辑必须将每一行存储在内存中,而不是迭代它们并抛出重复的内存。
如果你仍想尝试在Perl中做到这一点,一个好方法是做一个单级哈希,并开发一种廉价的方式来将你的唯一键列中的值编码成单个哈希值(包/在某些情况下可以使用解包,或者分割/连接,或者更具体情况,但表现更好的方式)。唯一的要求是编码值可以唯一映射回唯一键列值。
# Store my %storage; foreach my $row (@$result_set) { my $hash_key = encode_hash_key(row); my $new_row = $row; if (exists $storage{$hash_key}) { $new_row = merge_rows($row, $storage{$hash_key}); } $storage{$hash_key} = $new_row; }
相关问题
- 1. 使用group by
- 2. 使用group by partition by
- 3. GROUP BY使用SUM
- 4. GROUP BY使用Spotfire
- 5. SQL - 使用GROUP BY
- 6. 10使用GROUP BY
- 7. order by by group by
- 8. ORDER BY GROUP BY
- 9. group by by desc
- 10. group by by rollup
- 11. group by by django
- 12. $ group by by undefined
- 13. SQL GROUP BY和WHERE子句中PERL
- 14. ORDER BY MAX(`field_name`)使用GROUP BY
- 15. mysql - 使用group by和order by
- 16. MySQL的使用GROUP BY和ORDER BY的
- 17. 在查询中使用ORDER BY GROUP BY
- 18. mySQL使用Average By Group By功能
- 19. 如何使用group by by qlikview
- 20. group by by by by mysql
- 21. SQL Group By By By By Count
- 22. Mysql group by by by by?
- 23. GROUP BY和使用dplyr
- 24. GROUP BY使用CLOB数据
- 25. 使用CASE WHEN和GROUP BY
- 26. 显示在使用GROUP BY
- 27. MySQL的使用GROUP BY
- 28. MySQL - 使用GROUP BY和DESC
- 29. GROUP BY DataTable中使用LINQ
- 30. 使用GROUP BY与SQLDataSource
它可能不会是任何不是让你的数据库做得更快的分组。您应该考虑优化该查询。 – Ether 2010-12-06 18:56:50
只是出于好奇......是什么让你相信你对群体有问题? – Ronnis 2010-12-06 21:38:15