`
hongjunjie
  • 浏览: 10180 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
文章分类
社区版块
存档分类
最新评论

select count(*) 与 select count(1)区别?

 
阅读更多
发表于 2008-5-8 15:35:49|只看该作者
原帖由yangfei080于 2008-5-8 14:19 发表
我知道:
select count(*)是统计表中所有记录个数
而select count(1)是返回首行
后者的效率比前者要高

请问:
达人们能够解释下两者oracle内部实现的区别?
感谢!


楼主理解错了,select count(1) 可不是返回首列行数
其原理是对数字1进行统计,会将表中所有记录转化为1,然后再计数统计
相当于先select 1 from table 然后count
拼命赚钱买彩票!


原帖由 yangfei080 于 2008-5-8 16:38 发表
测试了一把,louis_xu 说的应该是对的

但是还是不太明白为什么 count(1) 要比 count(*)快呢?
按我的理解count(*)是直接统计记录行数,而count(1)要将每行记录转化为1再统计,应该是count(*)比count(1)快呀?




跟表结构有关系:
如果表中没有主键,那么count(1)比count(*)快
如果有主键,那么count(主键,联合主键)比count(*)快
如果表中只有一个字段,count(*)最快
以前看一位高手说的,不知道为什么

当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了!

从执行计划来看,count(1)和count(*)的效果是一样的。
但是在表做过分析之后,count(1)会比count(*)的用时少些(1w以内数据量),不过差不了多少。
这个也与表的记录数多少有关!如果1w以外的数据量,做过表分析之后,反而count(1)的用时比 count(*)多了。

另外,当数据量达到10w多的时候,使用count(1)要比使用count(*)的用时稍微少点!

如果你的数据表没有主键,那么count(1)比count(*)快
如果有主键的话,那主键(联合主键)作为count的条件也比 count(*)要快
如果你的表只有一个字段的话那count(*)就是最快的啦
count(*) count(1) 两者比较。主要还是要count(1)所相对应的数据字段。
如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。
因为count(*),自动会优化指定到那一个字段。所以没必要去count(1),用count(*),sql会帮你完成优化的
因此:count(1)和count(*)基本没有差别!

分享到:
评论

相关推荐

    sql server中Select count(*)和Count(1)的区别和执行方式

    在SQL Server中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数。很多人其实对这三者之间是区分不清的。本文会阐述这三者的作用,关系以及背后的原理。  往常我经常会看到一些所谓的优化建议不使用...

    Select count(*)、Count(1)和Count(列)的区别及执行方式

    在SQL Server中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数。很多人其实对这三者之间是区分不清的。本文会阐述这三者的作用,关系以及背后的原理。  往常我经常会看到一些所谓的优化建议不使用...

    select count()和select count(1)的区别和执行方式讲解

    在SQL Server中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数。很多人其实对这三者之间是区分不清的。本文会阐述这三者的作用,关系以及背后的原理。 往常我经常会看到一些所谓的优化建议不使用Count...

    mysql技巧之select count的区别分析

    1.测试环境 OS:LinuxDB:mysql-5.5.18table:innodb存储引擎 表定义如下: 2. 测试场景与分析【统计表group_message的... 通过上述测试结果可以看到,select count(*)和select count(1)都使用了group_id这个最短

    为什么 select count(*) from t,在 InnoDB 引擎中比 MyISAM 慢?

    统计一张表的总数量,是我们开发中常有的业务需求,通常情况下,我们都是使用 select count(*) from tSQL 语句来完成。随着业务数据的增加,你会发现这条语句执行的速度越来越慢,为什么它会变慢呢? 为什么会变慢?...

    分析MySQL中优化distinct的技巧

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

    count(1)、count(*)与count(列名)的执行区别详解

    执行效果: 1. count(1) and count(*) 当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时...所以没必要去count(1),用count(*),sql会帮你完成优化的 因此: count(1)和count(*)基本没有差别!

    帐套不能启用出现数据库问题 重复键

    设表名为X,字段为C1,C2,C3,.... ...SELECT COUNT(*) AS RowNumber,COL1,COL2 FROM TABLE1 T1 WHERE (SELECT COUNT(*) FROM TABLE1 T2 WHERE T1.COL1 = T2.COL1 AND T1.COL2 = T2.COL2)>1 GROUP BY COL1,COL2

    SQL注入语句大全-.判断有无注入点

    1.判断有无注入点 ; and 1=1 and 1=2 2.猜表一般的表的名称无非是admin adminuser user pass password 等.....and 1<(select count(*) from admin) 4.猜解字段名称 在len( ) 括号里面加上我们想到的字段名称

    SQL 2008 常用语句大全

     总数:select count * as totalcount from table1  求和:select sum(field1) as sumvalue from table1  平均:select avg(field1) as avgvalue from table1  最大:select max(field1) as maxvalue from ...

    [详细完整版]数据库实验2.doc

    1. 显示Employee表中姓王的记录 SELECT Employee.* FROM ... 分别显示三个表中总记录条数 (1) SELECT count(*) FROM employee; (2) SELECT count(*) FROM department; (3) SELECT count(*) FROM salary; 6. 显示

    关于mysql中innodb的count优化问题分享

    采用 代码如下:select count(*) from table where id >=0;或select count(*) from table;效果是一样的,都是默认使用pk索引,且都要全表扫描,虽然第一种性能可能高一些,但是没有明显区别。 但是如果用secondary ...

    MySQL中查询、删除重复记录的方法大全

    select title,count(*) as count from user_table group by title having count>1; SELECT * FROM t_info a WHERE ((SELECT COUNT(*) FROM t_info WHERE Title = a.Title) > 1) ORDER BY Title DESC 一、查找重复...

    数据查询:学生管理系统练习

    前言 studentdb数据库还是用的上篇文章的, 害,一直以为列名要用...① select count(*) from grade ② select substring(姓名,1,2) from student_info ③ select sqrt(分数) from grade where 分数>=85 ④ select y

    MySQL中count(*)、count(1)和count(col)的区别汇总

    最近感觉大家都在讨论count的区别,那么我也写下吧:欢迎留言讨论,话不多说了,来一起看看详细的介绍吧。 1、表结构: dba_jingjing@3306>[rds_test]>CREATE TABLE `test_count` ( -> `c1` varchar(10) DEFAULT ...

    Oracle-01查询学习.pdf

    select count(1) from emp; select count(*) from emp; /* 别名查询: 使用as 关键字, 可以省略 别名中不能有特殊字符或者关键字, 如果有就加双引号 */ select ename 姓名, sal 工资 from emp; select ename ...

    ASP中获得Select Count语句返回值的方法

    我们一般统计数据库记录时会用到Select Count(*)语句,当我们使用SQL Server的查询分析器时,直接输入Select Count(*) From 表名即会统计出该表中有几条记录,可是我们用ASP来实现时该怎么返回值呢?即如何输出统计...

Global site tag (gtag.js) - Google Analytics