关于如何减少sql查询次数,将多个查询一次查询完成

具体情况:现在有2个list (A,B) ,A list里面有A对象,A对象有属性id,A1属性, Blist里面有B对象 其中BId 和 B1属性,其中Alist里面的id和Blist里面的BId 有相等值,如何把Blist里面B1复制给ALIST里面的A1

具体解决办法

传统方式

对Alist进行循环,每次都往数据库查询具体关联的值:id,这样的弊端是需要进行几百次的查询,大大降低了效率:

     for (int i = 0; i < Alist.size(); i++) {
            B b = BMapper.select(Alist.get(i).getId());
            Alist.setA(b.getB())
        }

改进方式

直接将A里面的id全部拿出,形成1个idlist,进行一次查询;

List<String> ids = new ArrayList<>();
     for (int i = 0; i < Alist.size(); i++) {
            ids.add(Alist.get(i).getId());
        }

然后进行1次查询,讲所有B找出

List<B> BList = BMapper.selectListByIds(ids);
//BMapper
List<B> selectListByIds(@Param("ids") List<String> ids);
// mybaits.xml
<select id="selectListByIds" parameterType="list" resultMap="BaseResultMap">
        SELECT  *  from B 
        <where>
            <if test="ids!=null">
                BId in
                <foreach item="id" collection="ids" index="index"
                         open="(" separator="," close=")">
                    #{id}
                </foreach>
            </if>
        </where>
    </select>

同时进行复制操作(注意:这里用到了java 8的stream流,用来快速对list进行操作)

 for (A a: AList) {
//增加最后登陆时间
            B b = BList .stream()
                    .filter(b1-> b1.getBId().equals(a.getId()))
                    .findFirst()
                    .orElse(null);
            if (b != null){
                a.setA1(b.getB1());
            }
}

结论

// 数据量为10000
传统方式的接口耗时:6.89s
改进方式接口耗时:

:在这里插入图片描述

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL查询一 实验学时:2   实验类型:验证 实验要求:必修 一、实验目的 通过本实验使学生掌握单表查询并初步掌握多表查询的技能。 二、实验内容 使用实验一建立的银行贷款数据库和表,完成以下查询。 1-10题为单表查询,11-25为多表查询查询所有法人的法人代码、法人名称、经济性质和注册资金。 查询“B1100”银行的的银行名称和电话。 查询贷款金额在2000至4000万元之间的法人代码、银行代码、贷款日期和贷款金额。 查询2009年1月1日以后贷款且贷款期限是10年的法人代码。 查询贷款期限为5年、10年或15年的贷款信息。 查询经济性质为“私营“的所有法人的最高注册资金、最低注册资金和平均注册资金。 查询每种经济性质的法人的经济性质、最高注册资金、最低注册资金和平均注册资金。 统计每个法人的法人代码和贷款总次数,要求查询结果按贷款总次数的升序排列。 查询贷款次数超过3次的法人的平均贷款金额和贷款次数。  统计每种经济性质贷款的法人的总数和其平均贷款金额,列出平均贷款金额前三名的经济性质、法人总数和平均贷款金额。  查询贷款期限为5年、10年或15年的法人名称、银行名称、贷款日期、贷款金额和贷款期限。  查询经济性质为“国营”的法人在“上海”的银行贷款的信息,列出法人名称、银行名称和贷款日期。  查询与“B1100”银行在同一城市(假设银行名称的第5和第6个字符为城市名称)的其他的银行的名称。  查询哪些银行没有贷过款,列出银行号和银行名称。分别用多表连接和子查询两种方式实现。  查询贷过款的所有法人的名称,贷款银行名称,贷款日期,贷款金额,要求将查询结果放在一张新的永久表New_LoanT中,新表中的列名分别为:法人名称、银行名称、贷款日期和贷款金额。  分别查询经济性质“国营”和“私营”的法人名称,贷款银行名称,贷款日期,贷款金额,要求将这两个查询结果合并成一个结果集,并以法人名称、银行名称、贷款日期和贷款金额作为显示列名,结果按贷款日期的升序和贷款金额的降序显示。 使用实验一建立的学生数据库和表,完成以下查询 查询计算机系没有选课的学生的姓名和年龄。 统计‘VB’课程的考试最高分、最低分和平均分。 统计‘数据库’课程的选课人数。 统计计算机系学生’vb’课程考试的最高分、最低分、平均分。  统计每个系学生’vb’课程考试的最高分、最低分、平均分,列出系名和三个分数。 查询每个学生的修课总学分,并进行如下处理:如果总学分高于10分,则显示‘好学生’;如果总学分在6到10分间,则显示‘一般学生’;如果总学分低于6分,则显示‘不好学生’。 统计每个系每个学生的修课门数和平均成绩,如果修课门数大于3并且平均成绩高于90的显示‘优秀’;如果修课门数大于3并且平均成绩在80~90,则显示‘较好’;对于修课门数小于等于3的并且平均成绩高于90的显示‘较好’;如果修课门数小于等于3并且平均成绩在80~90,则显示‘一般’;其他情况显示为‘应努力’。列出系名、学号、原修课门数和平均成绩以及处理后的显示结果。 查询计算机系学生考试成绩最低的两个成绩所对应的学生的姓名、课程名和成绩。 列出没有选课的学生的学号、姓名和所在系。 三、思考题 1、创建表: 教师表(   tid 普通编码定长字符型,长度为10,主关键字   tname 普通编码定长字符型,长度为10,非空 zc 普通编码定长字符型,长度为6) 设此表数据如下: tid Tname zc T1 A 教授 T2 B 副教授 T3 C 教授 编写SQL语句,使查询的结果显示为如下形式: 教师号 教师名 教授 副教授 T1 A 教授 T2 B 副教授 T3 C 教授 2、创建表: 教师表(   tid 普通编码定长字符型,长度为10,主码   tname 普通编码定长字符型,长度为10,非空 zc 普通编码定长字符型,长度为6 Salary 工作,整型) 设此表数据如下: tid Tname zc Salary T1 A 教授 5000 T2 B 副教授 4000 T3 C 教授 5000 编写SQL语句,使查询的结果显示为如下形式: 教师号 教师名 教授工资 副教授工资 T1 A 5000 Null T2 B Null 4000 T3 C 5000 Null 四、实验报告 将实验结果反映在实验报告中,并对实验中遇到的问题及解决方案进行整理、分析总结,提出实验结论或自己的看法。
本系统由白天来晚上去自行研发基于ASP语言基础以及Access数据库的拥有多功能查询的应用程序,具有超高速查询,准确方便;支持模糊查询,扩大查询范围与准确性;数据自动生成,简化后台庞大的数据管理;开设留言板功能,可供用户与管理员之间的交流等功能。本系统从2007-11-9日开始制作,经过将近一个月的制作,于2007-12-1日完成,在测试过程中,发现有许多错误,重新设计数据库并完善部分程序。本系统主要是参考了www.8684.cn,可能思路不够该站的完善,在以后的路上我会慢慢完善。 超高速查询: 因为大家都知道JS的执行速度要比ASP快,所以大多数的公交查询系统都是使用JS程序段通过对大量的数据解析来查询得到结果。这样子做虽然速度快了但对于数据的分析却占用了很大的时间。如果数据大一点的。再者同时有多个用户使用这个系统的话就会给他们一个刷新很慢的感觉。为了满足更多的用户同时在线使用。只有两种方法:一是优化JS程序段,使它的运行时间减少,也就是在茫茫数据海洋中搜索的时间减少,一些不需要的程序给去掉;二是减少从数据库中的读取量以及读取次数,这样子在通过任何语言进行数据处理的量都比原先的少,自然速度也就上去了。试分析一下前面一种方案,本方案是可取的,但是前面的各个系统都是用差不多的方法,也通过了改进,可以看出,这方面的优化已经到了比较极端的地步。所有我运用了第二种方案:就是减少了数据库的读取量以及读取次数。我们通过循环来生成SQL字符串,而不是通过循环来生成多个SQL语句。这样子在相同的条件下就只需要打开一次数据库读取。而不是通过多次循环打开来实现。这样子在数据库的链接、打开、关闭等方面节省了比较大的时间。从而实现了高速的查询。 模糊查询: 本系统支持模糊查询,可以为用户提供更大的搜索空间,一些用户只知道一些信息的个别字而不知道自己要找的全部信息的话,系统就会自动执行模糊查询,查出数据库中所有与用户输入的信息有关的信息供用户选择进行重新查询。这样子用户就不必担心找不到自己所需要的站点或线路。给了用户更大的空间。 多个数据表自动生成: 要查询这些线路、站点以及换乘需要很多的信息表来合作完成。所以不免要更多的添加信息。这样子导致了后台庞大的数据信息管理的困难。为此特别开发了所有有关数据表自动生成的功能,所谓的自动的生成就是不需要管理员多次的去添加相关的信息,而是通过添加一条基本线路信息的同时系统会通过管理员提交的信息把其他所有的相关信息都一并生成且添加到相应的数据表中。从而这么庞大的数据库管理简化成了直接管理一个数据表就行了。修改数据也一样,修改一条线路信息的时候其他所有的相关信息都会随着管理员提交的修改资料而做相应的变动。这样子简化了管理员沉重的管理负担,简捷且不会出现很多站点与线路不对应的错误。保证数据的准确性…… 增设留言板 这个是系统中额外的板块。为的只是让所有的用户来监督我们这个系统的准确性和可靠性,如果数据出现错误或者是数据有更新而管理员没有及时更新的话用户可通过留言板跟管理员取得联系,提供给管理员相应的资料。仅仅几个管理员不可能及时全部准确的完成这么一个庞大的数据库的更新,所以特别开通这个功能让大家共同来完成这个比较有意义的项目。而管理留言也增设了批量删除等功能便于管理员的管理…… 管理员权限 该系统的可以设置3种权限的管理员,第一种,只有查看信息权限的管理员,第二种,具有添加路线权限的管理员,第三种是超级管理员,具有所有操作权限! 开始制作于2007-11-9 完成于2007-12-1日 修复于2008-1-19 后台地址:admin 后台登录: 用户名:admin 密码:admin 数据库路径:data/busdata.mdb 如果要修改数据库,请务必要修改inc/conn.asp里面的数据库连接 你第一次使用时也要记得修改这个路径,改成你自己的数据库路径
SQL2012软件简介 SQL查询器流传着很多软件,但相信此软件会有它的特别之处,本软件是经多名工程师测试。功能以及效率是有见证。本软件体积优势非常轻巧功能强大,1.4M的大小携带方便。如有建议请发邮件到[email protected],谢谢你的宝贵建议。话不多说,请看以下功能介绍! 特色功能: (一) 线程查询数据,可看查询结果完成的进度。 (二) 语句编辑强大的语法自动填充功能,可快速填充表或字段 (三) EXCEL导出后台完成。可选中语句导出EXCEL内容! 一、主功能概述 1.shift+空格 内容自动填充 2.预计表总记录数 3.预计表前N行记录 4.生成表字段以豆号分割 字段1,字段2.... 可自定义换行数量 5.显示表的详细信息,字段长度。可直接在查询结果中显示。 6.对查询内容导出EXCEL,高级结果可快速导出。后台处理不会卡程序。在导出大量的数据时可以操作其他操作。软件在导出完成后会检查EXCEL的行数完整性。可以EXCEL信息中查阅。 7.高级结果可拖放分组统计内容 8.对查询结果生成插入语句。可方便夸平台的数据插入 9.查询结果中快速定位查找内容字段位置,可模糊查找 10.可执行存储过程。执行过程中会在对应的GO中报错。可以得知是那行的错误 11.ctrl+1~5 的快捷语句记录。在使用过程中可以按对应的快捷键,在语句编号窗口中插入。临时代码记录10条。可方便用户临时记录编号语句。 12.直接对内容生成IN语句方便查询。 13.快速查询数据库中的表信息,快速查询对应的的字段,可直接筛选想要的字段内容。此功能可让使用者快速知道对应的字段类型! 14.可直接对字段列表的字段进行操作。插入,修改,删除!! 15.查询结果可以直接显示数据库的二进制图片内容 16.排量更新后台,此功能可以对当你手上有大量后台的时候不需要一个个去打开执行,只需要插入到软件的批量更新窗口中执行。执行成功会OK,编辑后再执行,直到全部OK。Ok过的不需重量执行放心! 17.文件传送。可以利用这软件传送文件。如果两个软件连到同一个SQL服务器上。此两个电脑可以互传文件了! 18.EXCEL导入数据库。可以把对应的EXCEL导入到数据库中。EXCEL头为列名。表名定义 19.远程复制,粘贴文件! 20.SQL中实用的语句帮助文档! 二、辅助功能 1.对IP或域名进行端口测试 2.获取当前外网IP地址 3.直接远程连接当前连接IP 4.网整测试当前连接的情况 注:本软件使用次数为10次,因本软件需要大家的建议。功能还在继续完善中,所以免费取得注册码!需要请发邮件或加QQ联系作者。多谢大家的支持! 联系方式:[email protected]
本系统支持模糊查询,可以为用户提供更大的搜索空间,一些用户只知道一些信息的个别字而不知道自己要找的全部信息的话,系统就会自动执行模糊查询,查出数据库中所有与用户输入的信息有关的信息供用户选择进行重新查询。这样子用户就不必担心找不到自己所需要的站点或线路。给了用户更大的空间。 后台登录: 用户名:admin 密码:admin   超高速查询:   因为大家都知道JS的执行速度要比ASP快,所以大多数的公交查询系统都是使用JS程序段通过对大量的数据解析来查询得到结果。这样子做虽然速度快了但对于数据的分析却占用了很大的时间。如果数据大一点的。再者同时有多个用户使用这个系统的话就会给他们一个刷新很慢的感觉。为了满足更多的用户同时在线使用。只有两种方法:一是优化JS程序段,使它的运行时间减少,也就是在茫茫数据海洋中搜索的时间减少,一些不需要的程序给去掉;二是减少从数据库中的读取量以及读取次数,这样子在通过任何语言进行数据处理的量都比原先的少,自然速度也就上去了。试分析一下前面一种方案,本方案是可取的,但是前面的各个系统都是用差不多的方法,也通过了改进,可以看出,这方面的优化已经到了比较极端的地步。所有我们运用了第二种方案:就是减少了数据库的读取量以及读取次数。我们通过循环来生成SQL字符串,而不是通过循环来生成多个SQL语句。这样子在相同的条件下就只需要打开一次数据库读取。而不是通过多次循环打开来实现。这样子在数据库的链接、打开、关闭等方面节省了比较大的时间。从而实现了高速的查询。   模糊查询: 本系统支持模糊查询,可以为用户提供更大的搜索空间,一些用户只知道一些信息的个别字而不知道自己要找的全部信息的话,系统就会自动执行模糊查询,查出数据库中所有与用户输入的信息有关的信息供用户选择进行重新查询。这样子用户就不必担心找不到自己所需要的站点或线路。给了用户更大的空间。   多个数据表自动生成:   要查询这些线路、站点以及换乘需要很多的信息表来合作完成。所以不免要更多的添加信息。这样子导致了后台庞大的数据信息管理的困难。为此特别开发了所有有关数据表自动生成的功能,所谓的自动的生成就是不需要管理员多次的去添加相关的信息,而是通过添加一条基本线路信息的同时系统会通过管理员提交的信息把其他所有的相关信息都一并生成且添加到相应的数据表中。从而这么庞大的数据库管理简化成了直接管理一个数据表就行了。修改数据也一样,修改一条线路信息的时候其他所有的相关信息都会随着管理员提交的修改资料而做相应的变动。这样子简化了管理员沉重的管理负担,简捷且不会出现很多站点与线路不对应的错误。保证数据的准确性……   增设留言板   这个是系统中额外的板块。为的只是让所有的用户来监督我们这个系统的准确性和可靠性,如果数据出现错误或者是数据有更新而管理员没有及时更新的话用户可通过留言板跟管理员取得联系,提供给管理员相应的资料。仅仅几个管理员不可能及时全部准确的完成这么一个庞大的数据库的更新,所以特别开通这个功能让大家共同来完成这个比较有意义的项目。而管理留言也增设了批量删除等功能便于管理员的管理……
本系统由白天来晚上去自行研发基于ASP语言基础以及Access数据库的拥有多功能查询的应用程序,具有超高速查询,准确方便;支持模糊查询,扩大查询范围与准确性;数据自动生成,简化后台庞大的数据管理;开设留言板功能,可供用户与管理员之间的交流等功能。本系统从2012-5-9日开始制作,经过将近一个月的制作,于2012-6-1日完成,在测试过程中,发现有许多错误,重新设计数据库并完善部分程序。本系统主要是参考了http://www.enet521.com/bus/index.html,可能思路不够该站的完善,在以后的路上我会慢慢完善。 超高速查询: 因为大家都知道JS的执行速度要比ASP快,所以大多数的公交查询系统都是使用JS程序段通过对大量的数据解析来查询得到结果。这样子做虽然速度快了但对于数据的分析却占用了很大的时间。如果数据大一点的。再者同时有多个用户使用这个系统的话就会给他们一个刷新很慢的感觉。为了满足更多的用户同时在线使用。只有两种方法:一是优化JS程序段,使它的运行时间减少,也就是在茫茫数据海洋中搜索的时间减少,一些不需要的程序给去掉;二是减少从数据库中的读取量以及读取次数,这样子在通过任何语言进行数据处理的量都比原先的少,自然速度也就上去了。试分析一下前面一种方案,本方案是可取的,但是前面的各个系统都是用差不多的方法,也通过了改进,可以看出,这方面的优化已经到了比较极端的地步。所有我运用了第二种方案:就是减少了数据库的读取量以及读取次数。我们通过循环来生成SQL字符串,而不是通过循环来生成多个SQL语句。这样子在相同的条件下就只需要打开一次数据库读取。而不是通过多次循环打开来实现。这样子在数据库的链接、打开、关闭等方面节省了比较大的时间。从而实现了高速的查询。 模糊查询: 本系统支持模糊查询,可以为用户提供更大的搜索空间,一些用户只知道一些信息的个别字而不知道自己要找的全部信息的话,系统就会自动执行模糊查询,查出数据库中所有与用户输入的信息有关的信息供用户选择进行重新查询。这样子用户就不必担心找不到自己所需要的站点或线路。给了用户更大的空间。 多个数据表自动生成: 要查询这些线路、站点以及换乘需要很多的信息表来合作完成。所以不免要更多的添加信息。这样子导致了后台庞大的数据信息管理的困难。为此特别开发了所有有关数据表自动生成的功能,所谓的自动的生成就是不需要管理员多次的去添加相关的信息,而是通过添加一条基本线路信息的同时系统会通过管理员提交的信息把其他所有的相关信息都一并生成且添加到相应的数据表中。从而这么庞大的数据库管理简化成了直接管理一个数据表就行了。修改数据也一样,修改一条线路信息的时候其他所有的相关信息都会随着管理员提交的修改资料而做相应的变动。这样子简化了管理员沉重的管理负担,简捷且不会出现很多站点与线路不对应的错误。保证数据的准确性…… 增设留言板 这个是系统中额外的板块。为的只是让所有的用户来监督我们这个系统的准确性和可靠性,如果数据出现错误或者是数据有更新而管理员没有及时更新的话用户可通过留言板跟管理员取得联系,提供给管理员相应的资料。仅仅几个管理员不可能及时全部准确的完成这么一个庞大的数据库的更新,所以特别开通这个功能让大家共同来完成这个比较有意义的项目。而管理留言也增设了批量删除等功能便于管理员的管理…… 管理员权限 该系统的可以设置3种权限的管理员,第一种,只有查看信息权限的管理员,第二种,具有添加路线权限的管理员,第三种是超级管理员,具有所有操作权限! 开始制作于2012-5-9 WWW.ESHOP5.COM 完成于2007-6-19日 修复于2007-6-30 后台地址:admin 后台登录: 用户名:admin 密码:admin 数据库路径:data/busdata.mdb 如果要修改数据库,请务必要修改inc/conn.asp里面的数据库连接 你第一次使用时也要记得修改这个路径,改成你自己的数据库路径 修正以下问题 1.首页换乘JS出错的BUG 2.不存在站点。查询出错的BUG 演示 http://www.enet521.com/bus/index.html 爱民新闻 www.enet521.com/news/index.html 爱民问答 www.enet521.com/wenda/index.html 螺杆空压机 WWW.lyhwh.com 版权归白天来晚上去 本人发布修改版而已

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值