【SQL】【关于COUNT的用法和细节】 | 您所在的位置:网站首页 › sql语言的使用方法有哪几种 › 【SQL】【关于COUNT的用法和细节】 |
COUNT的定义
官方定义:COUNT() 函数返回匹配指定条件的行数。 count的三种用法 count(列名) 函数返回指定列的值的数目【不计入NULL值】 SELECT COUNT(id) FROM tableX; count(*) 函数返回表中的记录数。【可以理解为表格的行数】 【计入NULL值】 SELECT COUNT(*) FROM tableX; count(DISTINCT 列名) 返回指定列的不同值的数目【即不计入重复项】 SELECT COUNT(DISTINCT id) FROM tableX; COUNT(*)、COUNT(1)和COUNT(列名)CONUT(*)与CONUT(1) 它们之间是没有区别,不存在单列还是多列的扫描问题,如果count(1)是聚集索引,那么会稍微快一点点,但是count(*)也会自动优化到指定字段,所以没必要纠结这个 CONUT(*)和COUNT(列名) CONUT(*)返回的是指定表的行数,只需找到表头,计算行数即可,不需要读取数据列的数据内容。 COUNT(列名),为了去除是NULL值的行,需要读取每一行的值。 因此CONUT(*)比COUNT(列名)快 COUNT(列名)和COUNT(DISTINCT 列名) 明显会是COUNT(列名)更快,因为DISTINCT需要查重,耗费更多时间 规律总结 如果对特定列做count的话,建立对应列的非聚集索引会有帮助COUNT(*)可以找最小的列建立非聚集索引来避免全表扫描不加where条件下,*和列名基本等价,有where下,*会快很多执行效率上: 列名为主键,count(列名)会比count(1)快 列名不为主键,count(1)会比count(列名)快 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*) 如果有主键,则 select count(主键)的执行效率是最优的 如果表只有一个字段,则 select count(*)最优。 用法注意 如果需要显示指定列,需要group by分组对应列,才能显示 SELECT id,name,COUNT(*) FROM tableX Group BY id,name 下面这个复杂语句很灵活,使用了子查询再嵌套查询的两张表关联查询。解释:子查询是查到course表中cid出现次数小于5的那个cid具体的值,得到的结果必须只有一条,这样才满足使用"> |
CopyRight 2018-2019 实验室设备网 版权所有 |