Jquery中文网 www.jquerycn.cn
Jquery中文网 >  脚本编程  >  C语言  >  正文 大数据量查询方法

大数据量查询方法

发布时间:2018-10-11   编辑:www.jquerycn.cn
jquery中文网为您提供大数据量查询方法等资源,欢迎您收藏本站,我们将为您提供最新的大数据量查询方法资源
直接使用数据库的分页sql获得子集.而不在内存中操作. 这样的好处是将子集放到一个中间结果里,每次再将中间结果合并到目标结果集.避免内存中同时出现二个大的结果集
<script>ec(2);</script>

 直接使用分页sql获得子集.而不在内存中操作. 这样的好处是将子集放到一个中间结果里,每次再将中间结果合并到目标结果集.避免内存中同时出现二个大的结果集

1. 一种全部查询到内存,然后使用subList, subList的场景比如in参数的限制.

private List<QualityHistory> getQualityWithGroupidAndKey(
            List<CpcKeyDTO> cpcList, Long groupid, Long accountid) {
        if (cpcList == null || cpcList.size() <= 0)
            return null;
        List<QualityHistory> res = new ArrayList<QualityHistory>();


        int group = cpcList.size() % IDS_PER_BATCH == 0 ? cpcList.size()
                / IDS_PER_BATCH : (cpcList.size() / IDS_PER_BATCH 1);
        for (int i = 0; i < group; i ) {
            String sql = "SELECT * FROM QUALITYHISTORY A WHERE A.GROUPID="
                    groupid
                    " AND A.ACCOUNTID="
                    accountid
                    " AND A.KEY  IN ("
                    DtoBaseUtility
                            .getOtherStringFromEntitySet(
                                    cpcList
                                            .subList(
                                                    i * IDS_PER_BATCH,
                                                    ((i 1) * IDS_PER_BATCH) > cpcList
                                                            .size() ? cpcList
                                                            .size()
                                                            : ((i 1) * IDS_PER_BATCH)),
                                    CpcKeyDTO.class, "getKey") ")";
            ;
            List<QualityHistory> ls = DtoBaseUtility
                    .queryWithSpecifiedClassType(sql, QualityHistory.class,
                            jdbcTemplateCpc);
            if (ls != null) {
                res.addAll(ls);
            }
        }
        return res;
    }

.

<blockquote>

......
for (int pageNo = 1; pageNo <= totalPageCount; pageNo ) {
doPage(sql, pageNo, set);
}

......

 


private void doPage(String sql, int pageNo, Set<String> set) {
long t1 = System.currentTimeMillis();
final int startIndex = PageUtil.getStartOfPage(pageNo, pageSize);
String sqlLimit = PageUtil.getLimitString(sql, true);
Object[] obj = new Object[] { startIndex, startIndex pageSize };
List<String> list = jdbcTemplateCpc.query(sqlLimit, obj,
new RowMapper() {

@Override
public Object mapRow(ResultSet rs, int arg1)
throws SQLException {
return "" rs.getString(2) rs.getString(1);
}

});
set.addAll(list);
long t2 = System.currentTimeMillis();
logger.info("第" pageNo "次查询数据量" list.size() ",set中现有"
set.size() "条记录,耗时" ((t2 - t1) / 1000) "秒");
}

</blockquote>

您可能感兴趣的文章:
sqlserver处理多级分类,查询结果呈树形结构
MongoDB高级查询实例分享
SQL Server数据页缓冲区的内存瓶颈分析
phpcms教程之mysql配置优化
EasyUI的treegrid组件动态加载数据问题的解决办法
DB2实验教程:数据查询
asp.net如何防范SQL注入式攻击
php的mssql扩展SQL查询中文字段名的解决方法
如何解决php中文字符乱码,中文字符入库乱码的问题
asp.net性能优化方法-数据库访问性能优化

[关闭]