count(*) 和 count(1)和count(列名)区别

执行效果上:  
count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL  
count(1)包括了所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL  
count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计

执行效率上:  
列名为主键,count(列名)会比count(1)快  
列名不为主键,count(1)会比count(列名)快  
如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)  
如果有主键,则 select count(主键)的执行效率是最优的  
如果表只有一个字段,则 select count(*)最优

当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了! 
执行计划上:
count(1)和count(*)的效果是一样的。 但是在表做过分析之后,count(1)会比count(*)的用时少些(1w以内数据量),不过差不了多少。  如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。 因为count(*),自动会优化指定到那一个字段。所以没必要去count(1),用count(*),sql会帮你完成优化的

因此:count(1)和count(*)基本上是没有差别!

原文地址:https://www.cnblogs.com/xiaowenshu/p/10384819.html

时间: 2024-10-09 19:05:39

count(*) 和 count(1)和count(列名)区别的相关文章

count(*)、count(1)、count(0)、count(列名)区别

1.count(*).count(1): count(*)对行的数目进行计算,包含NULL,count(1)这个用法和count(*)的结果是一样的. 如果表没有主键,那么count(1)比count(*)快.表有主键,count(*)会自动优化到主键列上. 如果表只有一个字段,count(*)最快. count(1)跟count(主键)一样,只扫描主键.count(*)跟count(非主键)一样,扫描整个表.明显前者更快一些. count(1)和count(*)基本没有差别,但在优化的时候尽量

mysql插入数据 报错[Err] 1136 - Column count doesn't match value count at row 1(表中有自增列)

版本:8.0.16 创建了一张表:create table user_table(uid int primary key auto_increment,uname varchar(10))auto_increment=1 插入数据报错: 经查找 ,有三种方式可以解决这个问题: 1.插入数据得时候,带入列名: insert into user_table("uname") values ("刘一") 2.自增键这列设置为0 insert into user_table

mysql提示Column count doesn't match value count at row 1错误

mysql提示Column count doesn't match value count at row 1错误,后来发现是由于写的SQL语句里列的数目和后面的值的数目不一致, 比如insert into 表名 (field1,field2,field3) values('a','b')这样前面的是三列,后面却只有二个值,这就会出现这个错误的. mysql提示Column count doesn't match value count at row 1错误

jdbc mysql - Column count doesn't match value count at row 1.

该句的意思是,insert操作的SQL语句里列的数目和后面值的数目不一致.比如说, String sql = "insert into t_aqi(city_name, cur_date, aqi_val, no2_val, no2_val) values(?, ?, ?, ?)"; 这里很明显,t_aqi括号中的参数的个数多余values括号中的个数. jdbc mysql - Column count doesn't match value count at row 1.

java.sql.SQLException:Column count doesn't match value count at row 1

1.错误描述 java.sql.SQLException:Column count doesn't match value count at row 1 2.错误原因     在插入数据时,插入的字段个数跟数据库表字段个数不一致 insert into student(sno,sname,sage,ssex) values(1,'张三丰','man'); 3.解决办法     保证插入数据字段个数跟数据库表中的字段个数一致 insert into student(sno,sname,sage,s

SQLException: Column count doesn't match value count at row 1

INSERT INTO table_name(col_name1, col_name2, col_name3) VALUES('value1','value2'); 语句中,前后列数不等造成的 转自:http://blog.csdn.net/ilbubby/article/details/6596119 SQLException: Column count doesn't match value count at row 1

[Err] 1136 - Column count doesn't match value count at row 1

1 错误描述 [Err] 1136 - Column count doesn't match value count at row 1 Procedure execution failed 1136 - Column count doesn't match value count at row 1 2 错误原因 3 解决办法 [Err] 1136 - Column count doesn't match value count at row 1

MySql数据库执行insert时候报错:Column count doesn't match value count at row 1

遇到这个问题之后,第一反应就是前后列数不等造成的,但是我检查SQL之后,发现列数是相同得,但是插入还是有问题,然后又写了简单得SQL只插入不为空得字段,执行还是报这个错,最后请教了高人,指点之后,大概是因为当前插入得表被锁住了,然后执行下面得SQL后,之前得SQL就可以正常插入了 LOCK TABLES `system_function_info` WRITE;  UNLOCK TABLES; MySql数据库执行insert时候报错:Column count doesn't match val

sqlserver sum 和count在关于进行统计时的区别

sum是对内容的数量进行相加,count 对表行数 对象进行统计 在使用 case 时,如 select subject,count(case when score>80 then score else null end) 优,count(case when score<80 and score>59 then score else null end) 优,count(case when score<60 then score else null end) 优from stusco