我有大量的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. SQL - 使用GROUP BY
- 3. $ group by by undefined
- 4. ORDER BY GROUP BY
- 5. group by by django
- 6. SQL GROUP BY和WHERE子句中PERL
- 7. 如何使用group by by qlikview
- 8. ORDER BY MAX(`field_name`)使用GROUP BY
- 9. mysql - 使用group by和order by
- 10. 使用ORDER BY和GROUP BY一起
- 11. group by by by by mysql
- 12. SQL Group By By By By Count
- 13. Mysql group by by by by?
- 14. GROUP BY使用CLOB數據
- 15. MySQL的使用GROUP BY
- 16. 正確使用GROUP BY
- 17. HQL查詢使用GROUP BY
- 18. GROUP BY使用另一臺
- 19. 使用GROUP BY和OVER
- 20. MySQL的:使用GROUP BY時
- 21. MySQL - 使用GROUP BY和DESC
- 22. XSLT GROUP BY使用密鑰
- 23. 派生表使用GROUP BY
- 24. 在JPA中使用GROUP BY
- 25. 使用GROUP BY與SQLDataSource
- 26. 不能使用group by,ORA-00979:不是GROUP BY表達式
- 27. 使用雙GROUP BY時獲得MIN()GROUP BY
- 28. sql group by sub group
- 29. GROUP BY
- 30. Rails/activerecords - group by by
它可能不會是任何不是讓你的數據庫做得更快的分組。您應該考慮優化該查詢。 – Ether 2010-12-06 18:56:50
只是出於好奇......是什麼讓你相信你對羣體有問題? – Ronnis 2010-12-06 21:38:15