`
宋双旺
  • 浏览: 152726 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Mysql中count(*),DISTINCT的使用方法和效率研究

阅读更多

Mysql中count(*),DISTINCT的使用方法和效率研究

在处理一个大数据量数据库的时候
突然发现mysql对于count(*)的不同处理会造成不同的结果

比如执行
SELECT count(*) FROM tablename
即使对于千万级别的数据mysql也能非常迅速的返回结果
而对于
SELECT count(*) FROM tablename WHERE…..
mysql的查询时间开始攀升

仔细查阅累下手册,发现当没有WHERE语句对于整个mysql的表进行count运算的时候
MyISAM类型的表中保存有总的行数,而当添加有WHERE限定语句的时候Mysql需要对整个表进行检索
从而得出count的数值

突然又想起来看到的不少新兴的php程序对于count的处理并没有很好的意识到这点
记录下

顺便提下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类型可以互补使用,就是看你需要什么样的数据了

PS:
越来越发现有很多细节是需要去探究的,
越来越发现自己写文字真的很杂乱,
有空研究下DISTINCT的效率

分享到:
评论

相关推荐

    分析MySQL中优化distinct的技巧

    有这样的一个需求:select count(distinct nick) from user_access_xx_xx; 这条sql用于统计用户访问的uv,由于单表的数据量在10G以上,即使在user_access_xx_xx上加上nick的索引, 通过查看执行计划,也为全索引扫描...

    MySQL中distinct和count(*)的使用方法比较

    首先对于MySQL的DISTINCT的关键字的一些用法: 1.在count 不重复的记录的时候能...3.上面的情况2对于需要返回mysql表中2列以上的结果时会有歧义,比如SELECT DISTINCT id, type FROM tablename;实际上返回的是 i

    MySQL中使用去重distinct方法的示例详解

    2.只能在SELECT 语句中使用,不能在 INSERT, DELETE, UPDATE 中使用; 3.DISTINCT 表示对后面的所有参数的拼接取 不重复的记录,即查出的参数拼接每行记录都是唯一的 4.不能与all同时使用,默认情况下,查询时返回的...

    mysql count详解及函数实例代码

    count函数是用来统计表中或数组中记录的一个函数,下面我来介绍在mysql中count函数用法。 count(*) 它返回检索行的数目, 不论其是否包含 NULL值。 SELECT 从一个表中检索,而不检索其它的列,并且没有 WHERE子句时...

    mysql中去重 distinct用法

    在使用MySQL时,有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条件(count(distinct id)),其原因是distinct...

    mysql入门.md

    MYSQL数核心技术,数据库的安装,SQL的语言分类##### 、数学函数 ``` round 四舍五入 rand 随机数 floor向下取整 ceil向上取整 mod取余 truncate截断 ##### 3、日期函数 now当前系统日期+时间 curdate当前...

    MySQL中distinct语句去查询重复记录及相关的性能讨论

    在 MySQL 查询中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。 关键词 DISTINCT 用于返回唯一不同的值,就是去重啦。用法也很简单: SELECT DISTINCT * FROM tableName ...

    MySQL中聚合函数count的使用和性能优化技巧

    但是其中有一些与使用中印象不同的情况,比如当count作用一列、多列、以及使用*来表达整行产生的效果是不同的。 示例表如下: CREATE TABLE `NewTable` ( `id` int(11) NULL DEFAULT NULL , `name` varchar(30) ...

    使用GROUP BY的时候如何统计记录条数 COUNT(*) DISTINCT

    在有group by的时候,如何统计结果记录的数量?需要的朋友可以参考下。

    高性能MySQL(第3版).part2

    6.7.4优化GROUPBY和DISTINCT239 6.7.5优化LIMIT分页241 6.7.6优化SQL_CALC_FOUND_ROWS243 6.7.7优化UNION查询243 6.7.8静态查询分析244 6.7.9使用用户自定义变量244 6.8案例学习251 6.8.1使用MySQL构建一个...

    mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录

    NOT IN、JOIN、IS NULL、NOT EXISTS效率对比 语句一:select count(*) from A where A.a not in (select a from B) 语句二:select count(*) from A left join B on A.a = B.a where B.a is null 语句三:select ...

    MySQL面试题经典40问!(全)(含答案解释)

    MySQL面试题经典40问!(全) 1、什么是数据库事务? 2、 Mysql 事务的四大特性是什么? 3、事务 ACID 特性的实现原理? 4、事务的隔离级别有哪些...12、 group by 和 distinct 的区别? 13、 Blob 和 text 有什么区别?

    MySQL命令大全

    我们给一个应用中使用的用户赋予最恰当的数据库权限。如一个只进行数据插入的用户不应赋予其删除数据的权限。MySql的用户管理是通过User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,...

    mysql数据库的基本操作语法

    MySQL中约束保存在information_schema数据库的table_constraints中,可以通过该表查询约束信息; 约束主要完成对数据的检验,保证数据库数据的完整性;如果有相互依赖数据,保证该数据不被删除。 常用五类约束: ...

    MySQL中使用SHOW PROFILE命令分析性能的用法整理

    show profile是由Jeremy Cole捐献给MySQL社区版本的。...mysql> SELECT COUNT(DISTINCT actor.first_name) AS cnt_name, COUNT(*) AS cnt -> FROM sakila.film_actor -> INNER JOIN sakila.actor USING(actor_id)

    MYSQL常用命令大全

    我们给一个应用中使用的用户赋予最恰当的数据库权限。如一个只进行数据插入的用户不应赋予其删除数据的权限。MySql的用户管理是通过 User表来实现的,添加新用户常用的方法有两个,一是在User表插入相应的数据行,...

    详解MySQL中EXPLAIN解释命令及用法讲解

    1,情景描述:同事教我在mysql中用explain,于是查看了...explain select count(DISTINCT uc_userid) as user_login from user_char_daily_gameapp_11 where uc_date >= "2017-09-04" and uc_date<="2017-09-08" AND

    MySQL经典面试题(含答案).zip

    group by 和 distinct 的区别? Blob和text有什么区别? 常见的存储引擎有哪些? myisam和innodb的区别? bin log/redo log/undo log是什么? bin log和redo log有什么区别? 说一下数据库的三大范式? 什么是存储...

    mysql数据库操作

    在select后面列的前面使用distinct可以不显示重复的行 3、条件查寻 a、语法: Select * from 表名 where 条件 B、比较运算符: 等于 = 大于> 小于 大于等于>= 小于等于不等于!=或 b、逻辑运算符 And or not C、...

Global site tag (gtag.js) - Google Analytics