首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

select count(*)、count(1)、count(主键列)和count(包含空的列)有何区别?

我们分别用10053打印如下4组SQL的trace, SQL1:select count(*) from bisal; SQL2:select count(1) from bisal; SQL3:select...前三个均为表数据总量,第四个SQL结果是99999,仅包含非空记录数据量,说明若使用count(允许空的列),则统计的是非空记录的总数,空记录不会统计,这可能和业务上的用意不同。...其实这无论id2是否包含空使用count(id2)均会使用全表扫描,因此即使语义上使用count(id2)和前三个SQL一致,这种执行计划的效率也是最低的,这张测试表的字段设置和数据量不很夸张,因此不很明显...总结: 11g下,通过实验结论,说明了count()、count(1)和count(主键索引字段)其实都是执行的count(),而且会选择索引的FFS扫描方式,count(包含空的列)这种方式一方面会使用全表扫描...,另一方面不会统计空,因此有可能和业务上的需求就会有冲突,因此使用count统计总量的时候,要根据实际业务需求,来选择合适的方法,避免语义不同。

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

MySQL学习,详解分页查询(limit)

limit介绍 limit⽤来限制select查询返回的⾏数,常⽤于分页等操作。...语法: select 列 from 表 limit [offset,] count; 说明: offset:表⽰偏移量,通俗点讲就是跳过多少⾏,offset可以省略,默认为0,表 ⽰跳过0⾏;范围:[0...count跳过offset⾏之后开始取数据,取count⾏记录;范围:[0,+∞)。 limit中offset和count不能⽤表达式。 下⾯我们列⼀些常⽤的⽰例来加深理解。...[asc|desc]⽤于对查询结果排序,asc:升序,desc:降序,asc|desc可以省 略,默认为asc • limit⽤来限制查询结果返回的⾏数,有2个参数(offset,count),offset...:表⽰跳过 多少⾏,count:表⽰跳过offset⾏之后取count⾏ • limit中offset可以省略,默认为0 • limit中offset 和 count都必须⼤于等于0 • limit

2.3K20

VUE 使用新版本 element-ui 组件库 Select 组件时, value 为对象时的 BUG 处理

VUE 使用新版本 element-ui 组件库 Select 组件时, value 为对象时的 BUG 处理 在公司项目中,我们使用了 element-ui 组件库,非常的好用。...而升级的内容中有我们希望使用的新特性,于是我们愉快的升级了。 但是在升级之后,我们发现在某一块功能中使用Select 组件出现了问题。...具体表现为选不上,随便选一个之后,从视觉角度讲,貌似把所有的全部选上了,而事实是,啥也没选上。 我们退回到 element-ui@1.3.7 版本时,问题消失。...问题找到之后,我们没在项目中使用自己写的组件,而是还原成使用 element-ui 的组件了。 PS: 这篇文章的次要重点是提醒那些遇到同样问题的朋友。

1.5K100

MySQL复习笔记(2)-约束

,而使用聚合函数查询是纵向查询,它是对一列的进行计算,然后返回一个结果。...count(字段) 统计指定列记录数,记录为NULL的不统计 sum(字段) 计算指定列的数值和,如果不是数值类型,那么计算结果为0 max(字段) 计算指定列的最大 min(字段) 计算指定列的最小...avg(字段) 计算指定列的平均值 *COUNT():表示表中所有字段** SELECT COUNT(*) FROM '表名'; SUM(math):表示分数求和 SELECT SUM(math)...SELECT SUM(math), sex FROM '表名' GROUP BY sex; limit语句 LIMIT是限制的意思,所以LIMIT的作用就是限制查询记录的条数。...-- 每页显示5条 -- 第一页: LIMIT 0,5; 跳过0条,显示5条 -- 第二页: LIMIT 5,5; 跳过5条,显示5条 -- 第三页: LIMIT 10,5; 跳过10条,显示5

87520

基础SQL-DQL语句-条件查询-排序-聚合函数-分组-limit语句

另外聚合函数会忽略空 五个聚合函数: count() : 计数 IFNULL(字段名,0) : 如果指定字段的为null,则使用0表示 sum() : 求和 max() : 求最大 min()...FROM 表名; SELECT COUNT(age) FROM 表名; 具体操作: 使用 count(字段) 查询学生总数,不会统计 null mysql> SELECT count(english...expr1; 否则其返回为expr2, 我们可以利用IFNULL()函数,如果记录为NULL,给个默认,这样统计的数据就不会遗漏 mysql> SELECT COUNT(IFNULL(english...---------+ 1 row in set (0.00 sec) mysql> 使用 count(*) 查询年龄大于40的总数 mysql> SELECT COUNT(*) FROM stu3...where后面不可以使用聚合函数 ” 5. limit语句 LIMIT是限制的意思,所以LIMIT的作用就是限制查询记录的条数。

3.5K10

玩转Mysql系列 - 第7篇:详解排序和分页(order by & limit),及存在的坑

上面使用了2种方式排序,第一种是在order by中使用了函数,第二种是使用了别名排序。...语法: select 列 from 表 limit [offset,] count; 说明: offset:表示偏移量,通俗点讲就是跳过多少行,offset可以省略,默认为0,表示跳过0行;范围:[0...count跳过offset行之后开始取数据,取count行记录;范围:[0,+∞)。 limit中offset和count不能用表达式。 下面我们列一些常用的示例来加深理解。...,count),offset:表示跳过多少行,count:表示跳过offset行之后取count行 limit中offset可以省略,默认为0 limit中offset 和 count都必须大于等于0...limit中offset和count不能用表达式 分页排序时,排序不要有二义性,二义性情况下可能会导致分页结果乱序,可以在后面追加一个主键排序 mysql系列大概有20多篇,喜欢的请关注一下,欢迎大家加我微信

3.5K10

MongoDB初级入门

如果count大于数组中元素的数量,该查询返回数组中的所有元素的。...数组参数使用[ skip , limit ] 格式,其中第一个表示在数组中跳过的项目数,第二个表示返回的项目数。...:{$sum:1}}}]) : 查询总数,相当于select count(*) from user,这里的聚合函数$sum表示求和,可以使用$引用集合中的字段,也可以直接使用数字,这里填写1就表示查询到一条记录就加一...$match使用MongoDB的标准查询操作。 $limit:用来限制MongoDB聚合管道返回的文档数。 $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。...:{$sum:1}}}]) : 统计name=Jack的人数 这个命令相当于SQL中的select count(*) from user where name="Jack" 我们可以使用db.user.find

1.2K50

故障分析 | 使用--force批量导入数据导致部分数据丢失的问题

---- 在一些数据补偿的场景中,使用备份导入表数据的时候,如果已知目标表存在冲突数据,会搭配 mysql 的 --force 参数来跳过冲突的行数据,防止批处理因为行冲突中断退出。...我们来复现一下具体的场景: 首先准备一个 sbtest1 表 mysql> select count(*) from testdb.sbtest1; +----------+ | count(*) |...在已知导入目标表中存在冲突数据的情况下使用 --force 参数来跳过报错的 SQL 语句避免导入中断退出。...--force的限制 --force 会忽略掉冲突的数据行,此场景只适用于导入时允许只保留冲突旧数据的情况。...使用 --force 导入表数据的前提是需要通过 mysqldump --skip-extended-insert 参数进行备份,此参数默认是关闭的;默认的多行插入模式搭配 --force 参数会跳过冲突数据所在的整条插入

80010

删库不跑路:论MySQL数据恢复

当前数据条数 -- 2019-08-09 11:01:54之前的数据条数 chengqm-3306>>select count(*) from mytest.mytest where ctime < '...0.00 sec) -- 所有数据条数 chengqm-3306>>select count(*) from mytest.mytest; +----------+ | count(*) | +---...SQL 跳过误操作 SQL 一般用于执行了无法闪回的操作比如 drop table\database 4.1.使用备份文件恢复跳过 4.1.1.不开启 GTID 使用备份文件恢复的步骤和基于时间点恢复的操作差不多...sec) 4.1.2 开启 GTID 使用 GTID 可以直接跳过错误的 SQL 1.找出备份时的日志位置 2.找出执行了 drop table 语句的 GTID 3.导出备份时日志位置到最新的...binglog 日志 4.恢复备份文件 5.跳过这个 GTID SET SESSION GTID_NEXT='对应的 GTID '; BEGIN; COMMIT; SET SESSION GTID_NEXT

1.5K20

删库不跑路!我含泪写下了 MySQL 数据恢复大法…

当前数据条数 -- 2019-08-09 11:01:54之前的数据条数 chengqm-3306>>select count(*) from mytest.mytest where ctime < '...0.00 sec) -- 所有数据条数 chengqm-3306>>select count(*) from mytest.mytest; +----------+ | count(*) | +---... sec) 4.1.2 开启 GTID 使用 GTID 可以直接跳过错误的 SQL 找出备份时的日志位置 找出执行了 drop table 语句的 GTID 导出备份时日志位置到最新的 binglog...日志 恢复备份文件 跳过这个 GTID SET SESSION GTID_NEXT='对应的 GTID '; BEGIN; COMMIT; SET SESSION GTID_NEXT = AUTOMATIC...; 应用步骤 3 得到的增量 binlog 日志 点击关注公众号,Java干货及时送达 4.2 使用延迟库跳过 4.2.1 不开启 GTID 使用延迟库恢复的关键操作在于 start slave until

58230

SQL 聚合查询

聚合函数 常见的聚合函数有: COUNT:计数。 SUM:求和。 AVG:求平均值。 MAX:求最大。 MIN:求最小。...COUNT COUNT 用来计算有多少条数据,比如我们看 id 这一列有多少条: SELECT COUNT(id) FROM test 但我们发现其实查任何一列的 COUNT 都是一样的,那传入 id...SQL 存在一种很特殊的类型 NULL,如果 COUNT 指定了具体列,则统计时会跳过此列为 NULL 的行,而 COUNT(*) 由于未指定具体列,所以就算包含了 NULL,甚至某一行所有列都为...现在很多 BI 引擎的自定义字段都有这条限制,因为混用聚合与非聚合在自定义内存计算时处理起来边界情况很多,虽然 SQL 能支持,但业务自定义的函数可能不支持。...因此可以在 HAVING 使用聚合函数: SELECT SUM(score) FROM amazing_table GROUP BY class_name HAVING AVG(score) > 60

2.4K31

MySQL索引与SQL语句优化

概念 1.普通索引:最基本的索引,它没有任何限制 2.唯一索引:索引列的必须唯一,且不能为空,如果是组合索引,则列的组合必须唯一。...区分度可以使用count(distinct(列名))/count(*)来计算。 12、利用覆盖索引来进行查询操作,避免回表。   ...13、建立索引的列不能为null,使用not null约束及默认 14、利用延迟关联或者子查询优化超多分页场景, MySQL并不是跳过offset行,而是取offset+N行,然后放弃前offset...select id,name from product limit 866613, 20 使用上述SQL语句做分页的时候,可能有人会发现,随着表数据量的增加,直接使用limit分页查询会越来越慢。...优化的方法如下: 可以取前一页的最大行数的id,然后根据这个最大的id来限制下一页的起点。 比如此列中,上一页最大的id是866612。

1.6K10
领券