精华内容
下载资源
问答
  • 表关联影响表查询速度
    2019-04-03 16:09:34

    最近遇到一个left join,表关联查询的SQL,很简单,如下:

    select count(0) from tableA left join tableB on tableA.col01 = tableB.col01 where col02 = ?

    tableA和tableB做左关联查询,但是速度巨慢,慢的想砸电脑~

    tableA表数据大概5万,tableB数据大概7万,2个表的col01列都添加了索引

    但是还是无比巨慢,然后百度了各种方式:

    • 1、左表数据量保持最低;
    • 2、加入索引;
    • 3、where里面尽可能过滤数据

    但是没任何用处,最后从别人那里才得知,原来是表数据字符编码导致的问题,具体原因如下:

     字符集排序规则
    tableAutf8mb4utf8mb4_general_ci
    tableButf8utf8_general_ci

    2个表的字符编码不一样,导致left join查询速度非常的慢

    所以,需要把2个表的字符编码,改成一致即可

    更多相关内容
  • 大家在开发过程中总能遇到某个数据需要加个字段数据的情况,然而有些数据要关联到大,就会造成总体查询效率大大降低的情况,这篇文章提供一个小思路,小技巧分享给大家。 上代码(需求场景是在主数据中加入一个...

    大家在开发过程中总能遇到某个数据表需要加个字段数据的情况,然而有些数据要关联到大表,就会造成总体查询效率大大降低的情况,这篇文章提供一个小思路,小技巧分享给大家。
    上代码(需求场景是在主数据中加入一个统计金额的数据,统计金额需要关联某个大表,造成大表连大表的尴尬情况):

    public PageInfo<Map> pageBill(Map params,Integer pageNum, Integer pageSize) {
    		//分页 分页场景使用更佳
            PageMethod.startPage(pageNum, pageSize); 
            //主数据查询
            List<Map> list = someBillMapper.listBill(params);
            if(list != null && list.size() > 0){
                /**
                   先将从数据需要用到的id提炼出来,此id是主数据与从数据关联的id(a.id = b.pid),
                   通过此id,从数据查询就可以精确高效的查询出需要的数据。
                */
                StringBuilder sb = new StringBuilder();
                for (Map m :list) {
                    sb.append(","+m.get("id"));
                }
                /**
                	从数据(通过上面得到的id直接查询需要的数据:
                	大概理解就是: select id,pid,amount from table where id in (提炼出来的id集)
                	此为简化的 实际场景复杂的多。
                */
                List<Map> otherAccount = someBillMapper.getOtherAccount(sb.toString().substring(1));
                /**
                	核心1:将查询出来的从数据通过map集合存起来,
                	key为从数据的关联pid(主 a.id = b.pid 从关系),value为整行map数据(id,pid,amount)
                */
                Map comMap = new LinkedHashMap();
                for (Map m :otherAccount) {
                    comMap.put(m.get("pid"),m);
                }
    			/**
    				核心2:遍历主数据,比对id,id相等将从数据插入主数据,实现主数据增加从数据。
    			*/
                for (Map p : list ) {
                    if(comMap.containsKey(p.get("id"))){
                        Map son= (Map) comMap.get(p.get("id"));
                        p.put("amount",son.get("amount"));
                    }
                }
            }
            PageInfo<Map> pageInfo = new PageInfo<Map>(list);
            return pageInfo;
        }
    

    (注意:一定要避免出现for循环里面再for循环(假如分页出来是100条,两个for循环是100+100,如果是双for循环就是100*100=10000次了),也不要在for循环里面进行数据库操作)
    大体就是这种思路,公司因为出台慢SQL标准,所以要尽量避免一个sql关联太多表查询,需要将业务拆分,以前的多表关联都要拆成单表,双表,在代码里跑,可以减轻数据库的负担同时减少慢sql的数量。不管几个表,拆解思路基本都是这样子。

    展开全文
  • 1.数据集需要多查询我使用了left join 进行表关联,`outbound`的数据大楷有几万条,以下的查询速度相当的慢,后面百度说要建索引,重新建索引太麻烦了,于是我换了一种思路SELECT IFNULL(SUM(`finishnum`),0) as...

    1.数据集需要多表查询我使用了left join 进行表关联,`outbound`表的数据大楷有几万条,以下的查询速度相当的慢,后面百度说要建索引,重新建索引太麻烦了,于是我换了一种思路

    SELECT IFNULL(SUM(`finishnum`),0) as turnoverNum FROM `outbound_item` oi

    LEFT JOIN `outbound` o ON oi.`outboundcode`=o.`outboundCode`

    LEFT JOIN `appliance` a ON a.`applianceNo`=oi.`applianceNo`

    WHERE o.`finishDate` LIKE CONCAT('%','2020-07','%') AND a.`applianceType`='2'

    查询时间为:(我的天啦,太慢了)

    1724a1fc8099

    2.我询问了一个大佬,他说分解去写 sql,这样效率最高,sql能不用 join 就不用,单表的查询效率是最高的,写代码执行效率绝对提升,于是把sql语句分解成入下图。

    SELECT IFNULL(SUM(finishnum),0) as turnoverNum

    FROM outbound_item

    WHERE

    outboundCode

    IN (SELECT outboundCode FROM outbound WHERE finishDate LIKE CONCAT('%','2020-07','%'))

    AND applianceNo

    IN (SELECT applianceNo FROM appliance WHERE applianceType = 2)

    查询时间为:(好快呀,开心)

    1724a1fc8099

    欢迎大家投稿,菜鸟程序员飞真顺献上。V:yqf822547775

    展开全文
  • 数据极大,导致多表关联查询数据慢。优先选用最直接有效的办法就是增加索引/优化sql/优化结构 (网上有很多) 当使用sql优化无法解决慢的问题,可以考虑一下方案 方案一:使用 Elasticsearch,把查询结果导入到...

      数据极大,导致多表关联查询数据慢。优先选用最直接有效的办法就是增加索引/优化sql/优化表结构 (网上有很多)

      当使用sql优化无法解决慢的问题,可以考虑一下方案

    方案一:使用 Elasticsearch,把查询结果导入到 Elasticsearch

       一种增量实时同步,每次更新都同时更新 Elasticsearch中的数据,

       另一种全量,每间隔一段时间同步到Elasticsearch中(不是实时数据)

    方案二:数据分析(根据不同的需求场景分析数据的特性采用可行的解决办法)

       如下查询数据,表更新频繁,

     分析数据 按照日期分组,当天的会变化,当天以前的数据不会变化

     每天跑批查询要展示的字段生成当天记录保存在单独第一张表中(或者redis中),实时查询时只查出当天的数据 并合并单独的表中的数据  返回到前端展示

    展开全文
  • 关于mysql当中给数据量特别大的两个关联查询的时候解决查询速度很慢的解决方法
  • 干货 | Elasticsearch多表关联设计指南

    万次阅读 多人点赞 2019-03-24 23:45:37
    Elasticsearch多表关联问题是讨论最多的问题之一,如:博客和评论的关系,用户和爱好的关系。 多表关联通常指:1对多,或者多对多。 本文以星球问题会出发点,引申出ES多表关联认知,分析了4种关联关系的适用场景...
  • 数据库中的外键和主、从主键和外键主键(主关键字,primary key)外键(外关键字,foreign key,公共关键字的其中一个)存在的必要性主和从表单 主键和外键 主键(主关键字,primary key) 关系型数据库中的...
  • mysql指引(四):join关联查询底层原理(上)

    千次阅读 多人点赞 2020-02-03 17:02:21
    讲解关联查询底层算法中的:嵌套循环连接、块嵌套连接、索引嵌套循环连接
  • ELK生态:ES中的数据关联查询

    千次阅读 2020-03-28 11:46:52
    先说下结论,如果不做特殊处理,es是无法完成类似与Join的关联查询的。 2、ES如何做关联 官网里面有几种支持关联查询的办法: 2.1 应用程序做关联 这个没有什么好说的,其实不算真正的关联,需要先查询...
  • phoenix可以用sql语句的形式来操作hbase数据库中的数据,并且phoenix可以支持大部分的mysql里面的sql语法与格式。因此具体的操作,比如增删改查本篇博客不记录了,与mysql...因此如果想要在phoenix中操作hbase中的
  • 连接顺序对查询效率的影响

    千次阅读 2019-05-23 19:58:23
    带条件查询表连接1000条,poetries为主(数据长度4.52 MB) 不带条件查询表连接13219条,poetries为主(数据长度4.52 MB) 带条件查询表连接1000条,poet为主(数据长度160.00 KB) 不带条件查询表连接...
  • SQL慢查询优化之联表查询

    千次阅读 2018-03-19 17:51:27
    一、前提基础1、关联查询:MySQL 表关联的算法是 Nest Loop Join,是通过驱动的结果集作为循环基础数据,然后一条一条地通过该结果集中的数据作为过滤条件到下一个查询数据,然后合并结果。2、驱动定义:1)...
  • 这段时间在做项目的过程中,遇到一个模块,数据之间的联系很复杂...简单地,可以对每个进行一次单表查询,然后将结果在应用程序中进行关联。例如,下面这个查询: select * from tag join tag_post on tag_post.tag_i
  • Oracle多表关联update优化

    千次阅读 2016-10-10 22:21:20
    我们都知道,在Oracle数据库中,对单进行更新采用标准update语法效率是非常高的,语法为UPDATE 名称 SET 列名称 = 新值 WHERE 列名称 = 某值,如下SQL... 如果涉及关联表,并把一个的字段值更新到另一个中...
  • oracle多表关联更新

    千次阅读 2019-06-25 14:02:25
    oracle的更新语句不通MSSQL那么简单易写,就算写出来了,但执行时可能会报 这是由于set哪里的子查询查出了多行数据值,oracle规定一对一更新数据,所以提示出错。要解决这样必须保证查出来的值一一对应。 原理 ...
  • phoenix关联表(视图)

    2019-07-11 12:00:21
    phoenix可以理解为一个为hbase服务的中间件,它可以创建关联表或者关联视图跟已有的hbase建立联系,也可以创建hbase中不存在的,以下简单介绍一下关联表的特性 同生共死,phoenix中删除关联表,会将hbase中的...
  • [经验]一次多表关联性能优化

    千次阅读 2019-03-29 14:04:24
    [经验]一次多表关联性能优化缘起尝试添加索引添加视图添加search进一步优化其他问题思考 缘起 项目初期拆分的太细,技术负责要求手写sql,mapper.xml中存在很多LEFT JOIN,数据量不是很多的情况下, 发生了一个...
  • 大数据开发过程中可能会遇到关键词或敏感词匹配这种场景,具体来说会有两张: a:包含content字段,数据量在百万级 ...这种笛卡尔积的查询方式会关联出数百亿条数据,并且通过运行日志发现只有1个map
  • 问题7:数据库多表关联方式

    千次阅读 2016-12-30 15:43:13
    在关系型数据库中,多表关联方式是影响性能最大的技术。为什么会把mysql定义为中小型数据库?主要原因是mysql是不支持hash join的。...虽然单的数据量大了,但是查询速度快了非常多,从几十秒降到
  • 简单地,可以对每个进行一次单表查询,然后将结果在应用程序中进行关联。例如,下面这个查询: select * from tag join tag_post on tag_post.tag_id=tag.id join post on tag_post.post_id=...
  • 超大表关联的优化方法

    千次阅读 2016-05-13 13:36:07
    但随着数据量多了,之间的关联效率就开始差强人意了。 我们今天模拟一下两个大之间关联的优化,核心思想是分表。
  • 查询优化:SQL优化 场景:当列表展示的数据来自很多中的数据时,由于...JOIN连接查询也很方便地获取到要返回的数据,但是问题来了,这么多表查询起来关联的数据非常多,查询耗时很大,甚至超过30秒,影响用户体...
  • 索引的第5个优点是可以加快连接的速度。要说明这个问题,首先要降到连接的3种算法,分别是:hash,nested loop,merge ,这里主要讲hash,nested loop这2种算法。现在有A、B两个,A数据量1000w,B数据2000...
  • Flink关联外部维通常的解决方案: a) 每来一条数据查一次数据库(慢、吞吐量低) b) 可以使用异步IO(相对快,消耗资源多) c) 广播State(最快、适用于少量数据、数据可以变化的) 上面这个方案需要JDBC Source...
  • 62616964757a686964616fe58685e5aeb931333431363661首先将大放在前面,即如图(tmp2数据量为40亿,tmp1数据量只有81条),这样执行时间为3小时21分钟,然后再将小放在前面,执行速度为10分钟。扩展资料:结构化...
  • 便要额外连接两张。 背景 5张表联查,数据量最大的一张中包含100+万条数据; 二手项目,刚开始并没有仔细查看每个字段定义; 动手开干 阅读了SQL后,直接将已有的三张表与新的两张LEFT JOIN起来。到...
  • select * fromtdleft join (select case_id as sup_case_id , count(*) supervise_number fromtd_kcdc_case_sup_infogroup by case_id) suponsup.sup_case_id = td.case_idwhere 1=1 /*不能去掉, 否则...联合查询时...
  • mysql的全扫描

    千次阅读 2021-01-18 21:47:30
    在mysql查询中,如果没有索引的话,当查询执行时,需要从第一行数据到最后一行数据进行全扫描。索引的目的就是辅助查询能快速定位到目标数据,然后获取查询结果。那么是否有了索引就一定能加以应用,而不会...
  • 我们平常使用LEFT JOIN 查询的SQL语句是什么样的呢?一般都是下面的这种情况吧… SELECT * FROM a LEFT JOIN b ON a.id = b.a_id 大致都是上面的情况,我们使用 LEFT JOIN 的对象大致都是一个数据。但是,有些...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 115,537
精华内容 46,214
关键字:

表关联影响表查询速度