展开

关键词

Hive Count Distinct优化

未经优化的SQL语句转化后的MapReduce作业,它的运行效率可能大大低于用户的预期。本文我们就来分析一个简单语句的优化过程。 日常统计场景中,我们经常会对一段时期内的字段进行去重并统计数量,SQL语句类似于 SELECT COUNT( DISTINCT id ) FROM TABLE_NAME WHERE ...; 这条语句是从一个表的符合 由于引入了DISTINCT,因此在Map阶段无法利用Combine对输出结果去重,必须将id作为Key输出,在Reduce阶段再对来自于不同Map Task、相同Key的结果进行去重,计入最终统计值。 改进后的SQL语句如下: SELECT COUNT(*) FROM ( SELECT DISTINCT id FROM TABLE_NAME WHERE … ) t; 在实际运行时,我们发现 这一优化大幅地减少了第一个作业的Reduce输出IO以及第二个作业Map的输入数据量。最终在同样的运行环境下优化后的语句执行只需要原语句20%左右的时间。优化后的MapReduce作业流如下: ?

2.3K31

SQL优化终于干掉了“distinct

SQL优化之多表联合查询干掉“distinct”去重关键字 一、优化目的 二、优化之前的sql长这样 三、DISTINCT关键字的用法 四、谈:如何优化distinct的sql 五、distinct真的和 四、谈:如何优化distinct的sql 说到这里,先给大家放上一个链接: 1、(Mysql5.7官方手册中提及到的关于优化distinct的方法) https://dev.mysql.com/doc/ 总结有以下比较重要的几点: 1、distinct与group by几乎等价; 2、distinct的相关优化与group by的查询优化方法是等价的; 五、distinct真的和group by等价吗? 那么我们优化distinct就变向的去优化group by了(我优化前的sql并未使用group by所以谈不上优化group by,只能说是把distinct的复杂sql改造成group by 的sql 七、总结 对于本人而言学到了: 1、distinct与group by几乎等价; 2、distinct的相关优化与group by的查询优化方法是等价的; 3、如果distinct的不能让sql最优化

77131
  • 广告
    关闭

    什么是世界上最好的编程语言?丨云托管征文活动

    代金券、腾讯视频VIP、QQ音乐VIP、QB、公仔等奖励等你来拿!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    MYSQL 查询优化之路-之DISTINCT全表扫描

    通过度娘,各种百度,是因为DISTINCT使用了全表扫描,现在特别记录下来。以背查验。 d.优化的目标是尽可能减少JOIN中Nested Loop的循环次数,以此保证:永远用小结果集驱动大结果集(Important!)! 如果还有第三个参与Join,则再通过前两个表的Join结果集作为循环基础数据,再一次通过循环查询条件到第三个表中查询数据,如此往复 2.两表JOIN优化: a.当无order by条件时 ,会出现using temporary,所以此时需要使用STRAIGHT_JOIN明确a为驱动表,来达到使用a.col上index的优化目的;或者使用left join且Where条件中不含b的过滤条件 /inner join即可,根据explain优化; b.有order by a.col条件时,所有join必须为left join,且每个join字段都创建索引,同时where条件中只能有

    1.9K42

    Count-Distinct实践: 万亿级数据量任务优化方式

    join实践: 万亿级数据量任务优化历程 单字段去重 先看一个简单的sql ,pv_id 去重计数 SELECT visit_type, count(DISTINCT pv_id) visit_type,pv_id from exp_table where ds=20220320 group by visit_type,pv_id ) group by visit_type; 也就是将count distinct , count(distinct pv_id) as cnt from exp_table where ds=20220320 group by visit_type,hash(pv_id)%50 多字段去重 SELECT visit_type, count(distinct pv_id), count(distinct item_id) from exp_table where 思考 Q: 同时存在count distinct 与 sum 类的聚合该如何优化倾斜问题?

    7630

    SQL命令 DISTINCT

    可以使用子查询实现DISTINCT、聚合函数和GROUP BY的预期组合。 字母大小写与DISTINCT优化 根据为字段定义的排序规则类型,将字符串值不同地分组在一起。 未使用优化. */ 可以使用管理门户优化包含DISTINCT子句的查询的查询性能。依次选择系统管理、配置、SQL和对象设置、SQL。 查看和编辑GROUP BY和DISTINCT查询必须生成原始值选项。(此优化也适用于GROUP BY子句。)。默认值为“否”。 此默认设置按字母值的大写排序规则对字母值进行分组。 此优化利用选定字段的索引。因此,只有在一个或多个选定字段存在索引时才有意义。它对存储在索引中的字段值进行排序;字母字符串以全部大写字母返回。 要确定当前设置,请调用$SYSTEM.SQL.CurrentSettings(),它显示打开的不同优化设置;默认值为1。

    7210

    Java Stream distinct

    因此想到了用 Java stream 的 distinct ,我们可以 usersList.stream.distinct(),不过可惜的是 distinct 方法是没有参数可以操作的,因此 google t)); }   然后可以在使用的时候 usersList.stream().filter(distinctByKey(User::getType))   当然,如果 list 是并行的,那么distinct 翻译自 https://stackoverflow.com/questions/23699371/java-8-distinct-by-property

    1.7K31

    SQL SELECT DISTINCT 语句

    SQL SELECT DISTINCT 语句 在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。 关键词 DISTINCT 用于返回唯一不同的值。 语法: SELECT DISTINCT 列名称 FROM 表名称 使用 DISTINCT 关键词 如果要从 "Company" 列中选取所有的值,我们需要使用 SELECT 语句: SELECT 如需从 Company" 列中仅选取唯一不同的值,我们需要使用 SELECT DISTINCT 语句: SELECT DISTINCT Company FROM Orders 结果: Company

    9030

    MySQL去重distinct

    去重 在MySQL中需要查询表中不重复的记录时,可以使用distinct关键字过滤重复记录。 语法: select distinct <字段名1>[,<字段名2>... -------+--------+------------+------+------------+------+------+--------+ 示例1:单个字段去重 mysql> select distinct 非重复计数: select count(distinct <字段名1>[,<字段名2>... ,<字段名n>]) from <表名>; 示例: mysql> select count(distinct deptno,job) from emp; +---------------------- ------+ | count(distinct deptno,job) | +----------------------------+ | 9

    78510

    Distinct Subsequences不同子序列

    同样你可以打印出dp看结构:上半区都为0,因为不可能,dp[0][0]为1因为空转空有一种可能(不删除)

    27540

    Leetcode 115 Distinct Subsequences

    Given a string S and a string T, count the number of distinct subsequences of T in S.

    246100

    LeetCode 115 Distinct Subsequences

    Pick One ---- Given a string S and a string T, count the number of distinct subsequences of S which equals

    22920

    LeetCode 0115 - Distinct Subsequences

    Distinct Subsequences Desicription Given a string S and a string T, count the number of distinct subsequences

    7120

    SQLite Distinct 关键字

    SQLite Distinct 关键字 SQLite的DISTINCT关键字与SELECT语句一起使用,来消除所有重复的记录,并只获取唯一一次记录。 当提取这样的记录时,DISTINCT 关键字就显得特别有意义,它只获取唯一一次记录,而不是获取重复记录。 语法 用于消除重复记录的 DISTINCT 关键字的基本语法如下: SELECT DISTINCT column1, column2,.....columnN FROM table_name WHERE --------- Paul Allen Teddy Mark David Kim James Paul James James 现在,让我们在上述的 SELECT 查询中使用 DISTINCT  关键字: sqlite> SELECT DISTINCT name FROM COMPANY; 这将产生以下结果,没有任何重复的条目: Name ---------- Paul Allen

    7320

    SQL中distinct的用法

    这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 distinct用于返回唯一不同的值。 表A: ? 表B: ? 1.作用于单列 select distinct name from A 执行后结果如下: ? select count(distinct name, id) from A; 若想使用,请使用嵌套查询,如下: select count(*) from (select distinct xing, name from B) AS M; 4.distinct必须放在开头 select id, distinct name from A; --会提示错误,因为distinct必须放在开头 5.其他 distinct语句中select显示的字段只能是distinct指定的字段,其他字段是不可能出现的。

    1.1K30

    SQL中distinct的用法

    这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 distinct用于返回唯一不同的值。 表A: ? 表B: ? 1.作用于单列 select distinct name from A 执行后结果如下: ? select count(distinct name, id) from A; 若想使用,请使用嵌套查询,如下: select count(*) from (select distinct xing, name from B) AS M; 4.distinct必须放在开头 select id, distinct name from A; --会提示错误,因为distinct必须放在开头 5.其他 distinct语句中select显示的字段只能是distinct指定的字段,其他字段是不可能出现的。

    84730

    在Django中使用DISTINCT

    有时候想用distinct去掉queryset中的重复项,看django文章中是这么说的 >>> Author.objects.distinct() [...] >>> Entry.objects.order_by ('pub_date').distinct('pub_date') [...] >>> Entry.objects.order_by('blog').distinct('blog') [...] >>> ', 'pub_date').distinct('author') [...] Note django文档中特别介绍了,distinct的列一定要先order_by并且在第一项。 的话,在distinct前面加上values或values_list  u.comment_set.values("forum").distinct() [{'forum': 1L}, {'forum'

    48030

    Mysql DISTINCT的实现思路

    DISTINCT实际上和GROUP BY操作非常相似,只不过是在GROUP BY之后的每组中只取出一条记录而已 所以,DISTINCT的实现方式和GROUP BY基本相同,同样可以通过索引扫描来实现,当然 ,在仅使用索引无法完成DISTINCT时,MySQL只能通过临时表来完成。 但是,DISTINCT并不须要进行排序。 也就是说,当只进行DISTINCT操作的Query仅利用索引无法完成操作时,MySQL会利用临时表来做一次数据的“缓存”,但不会对临时表中的数据进行filesort操作 示例 EXPLAIN SELECT 的优化,思路和GROUP BY基本上一致,关键在于利用好索引,当无法利用索引时,就要确保尽量不要在大结果集上面进行DISTINCT操作

    73470

    BI-SQL丨DISTINCT

    [1240] DISTINCT函数 在SQL中,DISTINCT函数也是常见函数之一,通常可以用来进行对表或者列进行去重操作。 其用途和PowerBI-DAX函数中的DISTINCT函数是类似的,都可以对表或者列进行去重。 基础语法 语法1: SELECT DISTINCT 列名称 FROM 表名称 语法2: SELECT DISTINCT * FROM 表名称 注:通常情况下,SQL数仓对于数据的存储是非常严格的,每一行数据都有对应的主键 (即唯一标识符),DISTINCT主要是解决类似于唯一信息的提取而存在的。 SELECT DISTINCT * FROM [Distinct] [1240] 结果如下: [1240] 对于A01的重复项目去重成功,多余的行被去除

    12520

    java stream distinct源码分析

    list.add(new String("hello")); list.add("world"); list.add("hello"); list.stream().distinct list.add(new A("hello")); list.add(new A("world")); list.add(new A("hello")); list.stream().distinct (upstream, StreamShape.REFERENCE, StreamOpFlag.IS_DISTINCT IntFunction<T[]> generator) { if (StreamOpFlag.DISTINCT.isKnown } }; } } }; } 上面标浅蓝色部分就是原因,即java stream distinct

    7610

    相关产品

    • 云顾问

      云顾问

      腾讯云顾问从安全、可靠、服务限制几个维度帮助您优化云基础设施,以提升系统安全性以及服务可靠性。结合腾讯云多年服务客户沉淀的最佳实践,一键完成云资源的巡检操作,根据业务实际使用情况,在线提供资源优化建议,高效提升业务连续性。

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭

      扫码关注云+社区

      领取腾讯云代金券