MySQL数据库对于COUNT(*)的不同处理会造成不同的结果,比如,执行下面查询时,即使对于千万级别的数据mysql也能非常迅速的返回结果。

SELECT COUNT(*) FROM tablename

但如果这样执行, mysql的查询时间开始攀升。

SELECT COUNT(*)  FROM tablename WHERE…..

当没有WHERE语句对于整个mysql的表进行count运算的时候,MyISAM类型的表中保存有总的行数,而当添加有WHERE限定语句的时候Mysql需要对整个表进行检索,从而得出count的数值,因此加上where条件的查询速度就会很慢了。

对于MySQL的DISTINCT的关键字的一些用法:

1.在count 不重复的记录的时候能用到,比如SELECT COUNT( DISTINCT id ) FROM tablename;就是计算talbebname表中id不同的记录有多少条。

2,在需要返回记录不同的id的具体值的时候可以用,比如SELECT DISTINCT id FROM tablename;返回talbebname表中不同的id的具体的值。

3.上面的情况2对于需要返回mysql表中2列以上的结果时会有歧义,比如SELECT DISTINCT id, type FROM tablename;实际上返回的是 id与type同时不相同的结果,也就是DISTINCT同时作用了两个字段,必须得id与tyoe都相同的才被排除了,与我们期望的结果不一样。

4.这时候可以考虑使用group_concat函数来进行排除,不过这个mysql函数是在mysql4.1以上才支持的。

5.其实还有另外一种解决方式,就是使用,SELECT id, type, count(DISTINCT id) FROM tablename,虽然这样的返回结果多了一列无用的count数据(或许你就需要这个我说的无用数据),返回的结果是只有id不同的所有结果和上面的4类型可以互补使用,就是看你需要什么样的数据了。

DISTINCT的效率:

SELECT id, type, count(DISTINCT id) FROM tablename

虽然这样的返回结果多了一列无用的count数据(或许你就需要这个我说的无用数据),SELECT id, type from tablename group by id;这样貌似也可以,用distinct的时候,如果它有索引,mysql会把它转成group by的方式执行。

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

统计一个按天分区,每天都有百亿条数据条的hive表中ac count 字段的非重用户数(大概两千万)。后来又更改为按id字段分别统计每个id的用户数。 很简单,直接 count ( distinct ac count )这个句子。然后写上了一行查询完成!然后等待了四个小时,map反着跑就知道肯定有问题。。 Hive SQL 基于的mapreduce是并行计算,百亿的数据可不是平时测试时的 mysql 里的几百条数据。 这么想来应该是map和
有这样的一个需求:select count ( distinct nick) from user_access_xx_xx; 这条sql用于统计用户访问的uv,由于单表的数据量在10G以上,即使在user_access_xx_xx上加上nick的索引, 通过查看执行计划,也为全索引扫描,sql在执行的时候,会对整个服务器带来抖动; root@db 09:00:12>select count ( distinct nick) from user_access; +———————-+ | count (d
sql distinct 详解以及优化 一. distinct 简介 distinct 这个关键字来过滤掉多余的重复记录只保留一条,但往往只用 它来返回不重复记录的条数,而不是用它来返回不重记录的所有值。其原因是 distinct 只有用二重循环查询来解决,而这样对于一个数据量非常大的站来说,无疑是会直接影响到 效率 的。 下面先来看看例子: table表 字段1 字段2 id name 1 a 2 b 3 c 4 c 库结构大概这样,这只是一个简单的例子,实际情况会复杂得多。 比如我想用一条
在数据库中, DISTINCT 和 GROUP BY 都是用来过滤重复数据的,但它们的原理和用法是不同的。 DISTINCT 是通过比较每一行数据,仅返回不重复的数据,因此如果数据量较大, DISTINCT 效率 较低。 GROUP BY 是通过分组,将相同的数据分为一组,并对每一组数据进行计算,因此如果数据量较大,GROUP BY 的 效率 较高。 总的来说,GROUP BY 的 效率 要优于 DISTIN...
如何提升自身sql 效率 ,更快得到想要的数据,是每一个使用sql的同学都需要学习和关注的事情。 sql作为面向大众的数据提取工具,除了研发、数据 分析 师,产品经理及业务运营同学也都有应用需求。只要sql无语法错误,保持等待,或长或短都是可以输出结果的。但是在数据量庞大或数据逻辑复杂时,或碰上线上资源紧张,或者好不容易等了3小时、结果发现数据有点异常需要修改后重跑,不知道有没有同学有相同的经历。 低效是每位同学都不乐见的,而避免这个问题就要求我们学习优化sql的方法,从而减少自己等数的焦虑时光。 而其中最常
COUNT ()聚合函数,以及如何优化使用了该函数的查询,很可能是 MySQL 中最容易被误解的前10个话题之一,在网上随便搜索一下就能看到很多错误的理解,可能比我们想象的多得多。 在做优化之前,先来看看 COUNT ()函数的真正作用是什么。 COUNT ()的作用 COUNT ()是一个特殊的函数,有两种非常不同的作用:它可以统计某个列值的数量,也可以统计行数。在统计列值时要求列值非空的(不统计NULL)。如果在 COUNT ()的括号中指定了列或列的表达式,统计的就是这个表达式有值的结果数。因为很多人对NUL..
最近遇到几个客户在HybridDB上做 性能 测试时,都遇到 Count Distinct 性能 调优问题。这里我们总结一下HybridDB中,对 Count Distinct 的几种处理方式。 我们以一个客户的案例来做说明。客户的典型的业务场景是,在用户行为日志中统计对应类别的行为数,类别有几千个,独立的行为的总量很多,有几千万;为 分析 行为,要查询一段时...
问题:想查询某个表A里面的数据关联的分表B数据,需要查询出A中每条数据中关联了B中多少条数据,还需要查出A关联表C中,每条A关联了多少条C中的数据。我用的是TP框架,当我直接用 count ()查询,关联两个表同时查询的时候会出现查询的数据量不正确的问题,具体原因和执行的顺序有关。最后采用的是 DISTINCT 函数查询,测试没有问题但是线上数据比较多就会出问题。所以优化了一下写法 原来写法: SELECT COUNT ( DISTINCT C.sexp_id) AS count 1,