/**
 * 解决因为链表过长,sql查询慢的问题
 * 使用分治算法,先切分链表,然后查询结果,最后合并结果
 *
 * @author lingpy
 * @since 1.0
 */
public class DivideAndConquerUtil {
    /**
     *
     * @param dataList 元数据
     * @param exceuter 执行类
     * @return
     * @throws Exception
     */
    public static <R extends Map, E> R query(List<E> dataList,Executer<R,E> exceuter)throws Exception{
        return query(dataList,exceuter,100);
        
    }
    
    /**
     *
     * @param dataList
     * @param exceuter
     * @param subArrayLength 切分的粒度
     * @return
     * @throws Exception
     */
    @SuppressWarnings("unchecked")
    public static <R extends Map, E> R query(List<E> dataList,Executer<R,E> exceuter,int subArrayLength)throws Exception{
        if(dataList == null || dataList.size() <= subArrayLength){
            return exceuter.execute(dataList);
        }
        R result = null;
        int start = 0, end = start;
        while(start < dataList.size()){
            end = start + subArrayLength;
            if(end  > dataList.size()){
                end = dataList.size();
            }
            R r = exceuter.execute(dataList.subList(start, end));
            if(result == null){
                result = r;
            }else{
                result.putAll(r);
            }
            start = end;
        }
        return result;
    }
    
    public interface Executer<R,E>{
        R execute(List<E> dataList) throws Exception;
    }
}

解决因为链表过长,sql查询慢的问题的更多相关文章

  1. 在项目中,多个方法会调用相同的sql语句,怎么解决各个方法的不同sql查询,解决冲突。

    公司的代码中sql语句,可能会被多个方法进行调用,但是有的方法会关联到别的表,这样的话,如果修改不当,那么同样调用该sql语句的方法,会出现报错. 最近做的公司的一个功能,就出现这样一个问题,虽然本功 ...

  2. SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题

    目标:减少SQL查询数据,避免使用一条SQL语句解决复杂问题 反模式:视图使用一步操作,单个SQL语句解决复杂问题 使用一个查询来获得所有结果的最常见后果就是产生了一个笛卡尔积.导致查询性能降低. 如 ...

  3. SQL 查询性能优化----解决书签查找

    先来看看什么是书签查找: 当优化器所选择的非聚簇索引只包含查询请求的一部分字段时,就需要一个查找(lookup)来检索其他字段来满足请求.对一个有聚簇索引的表来说是一个键查找(key lookup), ...

  4. 解决SQL查询总是超时已过期

    解决SQL查询总是超时已过期 .在WIN8里提示:OLE DB 或 ODBC 错误 : 查询超时已过期; HYT00 1.由于数据库设计问题造成SQL数据库新增数据时超时 症状:   Microso ...

  5. Hibernate通过SQL查询常量时只能返回第一个字符的解决方法

    在Hibernate中如果通过 [java] view plaincopy session.createSQLQuery("select '合计' as name from dual&quo ...

  6. sql 查询某个字段最长的记录

    sql  查询文本字段中值的长度最长的记录 一.函数1.SQL ServerLEN() 函数返回文本字段中值的长度.SELECT LEN(column_name) FROM table_name;2. ...

  7. 64位环境中使用SQL查询excel的方式解决

    --64位环境中使用SQL查询excel的方式 环境: OS:Windows Server 2008 R2 Enterprise MSSQL:Microsoft SQL Server 2008 R2 ...

  8. 用SQL查询方式显示GROUP BY中的TOP解决方法[转]

    用SQL查询方式显示GROUP BY中的TOP怎样用一个SQL语句来显示 分组后每个组的前几位 比如把一个学校所有学生的成绩按班级分组,再显示每个班级前五名的信息. 班级     学生   成绩 一班 ...

  9. (转)经典SQL查询语句大全

    (转)经典SQL查询语句大全 一.基础1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql s ...

随机推荐

  1. PHP class 继承

    1.执行结果 成员名 成员修饰符 方法名 方法修饰符 执行结果 name private setName private 在构造函数函数中执行父类私有方法,子类未能覆盖private成员变量和方法,修 ...

  2. 13-EasyNetQ之发布者确认

    AMQP发布消息默认情况下是非事务性的,不能确保你的消息真正送达代理.AMQP可以去指定事务性发布,但是RabbitMQ这样会非常慢,我们没有让EasyNetQ API去支持此功能.为了高效的确保投递 ...

  3. java堆栈区别(个人理解)

    java把内存分为2种,一种是堆内存,一种是栈内存. 堆内存:通过new关键字出来的对象放在堆内存中,堆内存可以动态的分配内存大小,垃圾回收器自动回收不再使用的数据,由于动态分配内存所以存取的速度较慢 ...

  4. 性能调试工具——oprofile

    oprofile利用cpu硬件层面提供的性能计数器(performance counter),通过计数采样,帮助我们从进程.函数.代码层面找出占用cpu的"罪魁祸首". 常用命令 ...

  5. SQL语句 表字段的操作 添加,删除,修改表的字段

    alter table 表名 drop constraint 约束名字   //删除字段的原有约束 alter table 表名 add constraint 约束名字 DEFAULT 默认值 for ...

  6. spring注解开发的准备工作

  7. 常用的软件设计模式的Java实现——让编程从野生到飞起

    常用的软件设计模式的Java实现——让编程从野生到飞起_野生技术协会_科技_bilibili_哔哩哔哩  https://www.bilibili.com/video/av7596511/

  8. 【总结整理】原创概念原创idea---摘自《结网》

    假如你有一个原创想法,搜索引擎是否已有现成产品与自己的想法一致,如果有,研究他可以节省很多摸索的时间:若没有,那就是一个货真价实的原创idea: 第一类:受到现有产品的启发,将既有概念进行了转换. 第 ...

  9. 百度Ueditor编辑器取消多图上传对话框中的图片搜索

    百度Ueditor确实是一个非常强悍的编辑器,功能强大!但是实际开发需求复杂,总会有各种不符合要求的,比如想要取消多图上传的“图片搜索”选项卡(这个图片搜索真心难用)! 以ueditor 1.4.3为 ...

  10. sqLSERVER 计划缓存

    在这一期的性能调优培训里,我想详细谈下SQL Server里计划缓存及其副作用.在上一周你已经学到,每个提交给SQL Server的逻辑查询会编译成物理执行计划.那个执行计划然后会被缓存,即被称为计划 ...