【过滤重复】一次过滤重复数据的优化过程
2011-05-21 15:17
323 查看
【问题】在oracle中分多次执行SQL查询,结果是百万条数量级的字符串数据,需过滤重复掉数据并保证各原SQL查询的记录顺序,然后输出到txt中。
【分析】1、使用union all。使用union all连接各SQL语句执行distinct查询,随过滤了重复数据,但难保证原SQL查询的记录顺序。
2、使用Datatable。利用DataTable.Merge合并各DataTable,然后利用ToTable进行重复数据过滤,结果符合问题描述需求,但执行过程中耗费了很长时间都没有执行完,原因在ToTable过滤大数据量时异常得慢。
3、使用Dictionary和sortedDictionary字典。每条记录在输出时,判断是否在Dictionary里,不在则add到dictionary,然后输出。时间在30s内执行完成。
【结论】DataTable的ToTable方法效率极低,官方MSDN上推荐的方法不一定适合所有情况。在使用Dictionary时,原以为在容器中操作超大量数据时,处理会很慢,测试后结果相反。所以实践出真知。
ps:如果只是当作索引使用, 请用 Dictionary.如果需要查找最小的几个元素, 或者需要按顺序遍历元素, 就用 SortedDictionary.
【分析】1、使用union all。使用union all连接各SQL语句执行distinct查询,随过滤了重复数据,但难保证原SQL查询的记录顺序。
2、使用Datatable。利用DataTable.Merge合并各DataTable,然后利用ToTable进行重复数据过滤,结果符合问题描述需求,但执行过程中耗费了很长时间都没有执行完,原因在ToTable过滤大数据量时异常得慢。
3、使用Dictionary和sortedDictionary字典。每条记录在输出时,判断是否在Dictionary里,不在则add到dictionary,然后输出。时间在30s内执行完成。
【结论】DataTable的ToTable方法效率极低,官方MSDN上推荐的方法不一定适合所有情况。在使用Dictionary时,原以为在容器中操作超大量数据时,处理会很慢,测试后结果相反。所以实践出真知。
ps:如果只是当作索引使用, 请用 Dictionary.如果需要查找最小的几个元素, 或者需要按顺序遍历元素, 就用 SortedDictionary.
相关文章推荐
- 工作中的那些坑(1)——一次过滤存量数据的优化过程
- 记录一次优化程序的过程:几百万的商品过滤黑名单你会怎么想?
- 记录一次bug解决过程:else未补全导致数据泄露和代码优化
- 较大数据文件的读取优化过程
- 一次误删数据的恢复过程
- 一次数据分析的全过程
- 如何在JAVA程序中使用Struct一次传入多条数据给Oracle的存储过程。
- 【Oracle 函数索引】一次数据库的优化过程
- MySQL 查询过滤重复数据
- 记一次揪心的MySQL数据恢复过程
- 过滤重复数据 JavaScript push() 方法
- SQL优化(索引、存储过程、数据分页的存储过程)
- 将dt中的重复数据过滤掉
- 记一次Oracle数据恢复过程
- 记一次ListView性能优化全过程
- 断点续传过程中重复上传数据
- SQL Server 第四堂课,创建存储过程。存储过程是一组编译在单个执行计划中的transact-SQL语句。存储过程相当于C#函数,可以允许模块化程序设计,允许更快执行如果某操作需要大量transct-SQL代码或需要重复执行,将在创建存储过程中对其进行分析和优化。
- mysql 查询重复的数据的SQL优化方案
- 漫谈千亿级数据优化实践:一次数据优化实录
- 在C#应用程序中,利用表值参数过滤重复,批量向数据库导入数据,并且返回重复数据