文档章节

select count(*)和select count(1)的区别

architect刘源源
 architect刘源源
发布于 2018/02/06 19:12
字数 580
阅读 91
收藏 0

一般情况下,Select Count (*)和Select Count(1)两着返回结果是一样的

    假如表沒有主键(Primary key), 那么count(1)比count(*)快,

    如果有主键的話,那主键作为count的条件时候count(主键)最快

    如果你的表只有一个字段的话那count(*)就是最快的

   count(*) 跟 count(1) 的结果一样,都包括对NULL的统计,而count(column) 是不包括NULL的统计

 1、select 1 与 select *的区别 
selelct 常量 from ... 对应所有行,返回的永远只有一个值,即常量 。所以正常只会用来判断是否有还是没有(比如exists子句)。而select * from ... 是返回所有行的所有列。 
性能上的差异,关键看你的from和where子句。比如说如果你的where条件中可以通过索引,那显然 select 1 from ... 的性能比 select * from ... 好。 
2、select sum(1)的使用 
select count(*)返回所有满足条件的记录数,此时同select sum(1) 
但是sum()可以传任意数字,负数、浮点数都可以,返回的值是传入值n*满足条件记录数m

B

select count(1) from test 
-- 在没有聚集的情况下,这种查询的效率可能会高一点
select count(*) from test 
-- 有索引走索引,没索引全表扫描,可以利用表的统计信息
select count(a) from test 
-- 扫描a列的数据记录数,如果a上没有索引,则效率最差,并且如果a列包含null,则不会计数

C

count(1) 是绝对快,它只统计记录条数,对条件下的表扫描一遍而已
count(*) 是可能快,有主键的时候只扫主键,主键数等于记录数
count(主键)=count(1)

COUNT(*)与COUNT(列名)的区别

以前一直没有留意到COUNT(*)与COUNT(列名)的区别,昨天晚上无意中看到数据库系统工程师教程里面的一句话."如果null参与聚集运算,则除count(*)之外其它聚集函数都忽略null."
      这句话的意思说如果字段是有空值的话,你用SUM去计算,得到的结果有可能不准确.
    看一个实例.
    表A
    ID    EE
      1      e
      2    null
    select  count(*) from A  --结果是2
    select  count(EE)  from A  ---结果是1

© 著作权归作者所有

architect刘源源

architect刘源源

粉丝 169
博文 564
码字总数 941209
作品 0
浦东
程序员
私信 提问
SQL --count的使用

见如下两种情况, 上一条SQL查出的结果为0,下一条SQL报错,两条SQL的差别为count((查询))与count(查询) 我估计这两种的区别是 1>select null是一条查询语句 2>(select null) 是一个结果 3>...

求是科技
2016/07/22
34
2
建物化视图,完成query rewrite,refresh功能

1、创建物化视图 TEST8@ odb>create materialized view v_wuhua as select * from gaoshuiwei; create materialized view v_001 asselect * from gaoshuiwei * ERROR at line 1: ORA-01031:......

vast2006
2016/08/22
0
0
sql嵌套查询总结01

1、where 与 HAVING 的区别 where是在查询结果出来之前,进行条件过滤,而HAVING是在查询结果出来之后,进行条件过滤。 最明显的区别就是:where后面加的字段名必须是要查询的实体表里存在的...

oanyt
2015/06/27
0
0
SQL count(*) 和count(1)的区别

开发中经常会使用这两个聚合函数,作用都是用来统计记录行,今天查找资料发现,其实这两个函数并没有区别, 实践才是检验的标准,首先看执行计划(表是我自己建立的): 可以看到,两个执行计...

一曲图森破
2018/09/25
776
0
Oracle关于left join on…and 及 left join on...whe...

关于left join...on...and...以及left join...on...where的区别,网上很多的说法是对于left join...on...and...,and所限定的条件只对关联字段起作用,比如select a.* from tmp_table_a a l...

0o清风徐来o0
2013/05/30
182
0

没有更多内容

加载失败,请刷新页面

加载更多

IntelliJ IDEA远程连接tomcat,实现单步调试

web项目部署到tomcat上之后,有时需要打断点单步调试,如果用的是Intellij idea,可以通过如下方法实现: 开启debug端口,启动tomcat 以tomcat7.0.75为例,打开bin目录下的catalina.bat文件,...

程序员欣宸
48分钟前
5
0
如何在 Bash 中对变量递增或者递减

导读 编写 Bash 脚本时最常见的算术运算之一是递增和递减变量。这通常在循环中用作计数器,但它也可以在脚本的其他地方出现。 递增和递减意味着分别从数值变量的值中添加或减去值(通常为 1 ...

问题终结者
53分钟前
3
0
如何使用ssh工具便于远程管理

前几天亲眼经历了Linux服务器运维过程,眼看着别人熟练运用Linux管理工具,自个心里不是滋味,所以自己特意整理了一篇“专题”:使用ssh服务远程管理主机。 首先在使用ssh服务工具之前,先熟...

Linux就该这么学
今天
6
0
IT兄弟连 HTML5教程 介绍HTML5给你认识 习题

1.关于HTML5说法正确的是:(C) A.HTML5只是对HTML4的一个简单升级 B.所有主流浏览器都支持HTML5 C.HTML5新增了离线缓存机制 D.HTML5主要是针对移动端进行了优化 2.为了标识一个HTML文...

老码农的一亩三分地
今天
6
0
关于1加手机rom的分析过程

1、关于清理app缓存的信息 framework.jar和services.jar文件,都位于/system/framework目录下面 framework.jar的android.os.Intent类里面定义了action "android.intent.action.CLEAR_PKG",这......

shatian
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部