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

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

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

3.3K30

MySQL COUNT(*) COUNT(1) 与 COUNT() 区别

文章目录 1.COUNT() 2.COUNT(*) COUNT(1) 与 COUNT() 功能? 3. 统计表行数性能区别 3.1 COUNT(主键) 执行过程?...对于 COUNT 使用,常见使用方式是: COUNT(*) COUNT(1) COUNT() 三者在功能和性能上有区别吗?且听我一一道来。...2.COUNT(*) COUNT(1) 与 COUNT() 功能? COUNT(*) 返回结果集中所有记录数,包含字段为 NULL 记录。 COUNT(1) 功能上等同于 COUNT(*)。...统计表行数性能区别 统计表总记录数下面这 4 种做法: COUNT(*) COUNT(1) COUNT(主键) COUNT(字段) 关于四者性能,基于常用 InnoDB 存储引擎来说明。...我前面将案例都是基于 Innodb 存储引擎来说明,但是在 MyISAM 存储引擎里,执行 COUNT 函数方式是不一样,通常在没有任何查询条件下 COUNT(*),MyISAM 查询速度要明显快于

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

    MySQL中count是怎样执行?———count(1),count(id),count(非索引),count(二级索引)分析

    前言   相信在此之前,很多人都只是记忆,没去理解,只知道count(*)、count(1)包括了所有行,在统计结果时候,不会忽略为NULL,count(列名)只统计列名那一,在统计结果时候,...会忽略为NULL记录。   ...——基于MySQL 8.0.22索引成本计算 分析一下执行计划 在执行上述查询时,server层会维护一个名叫count变量,然后: server层向InnoDB要第一条记录。...重复上述过程,直到InnoDB向server层返回没记录可查消息。 server层将最终count变量发送到客户端。...count(二级索引)只能选择包含我们指定索引去执行查询,可能导致优化器选择索引执行代价并不是最小。

    1.4K20

    SQL 求 3 4 种方法

    等建完索引,我又发现一个可以优化地方。在本题中,只需找出散(即每差异即可,完全没必要把整张表数据,都拉出来。因为 user_id 肯定会有重复嘛。...于是我又想到了两个方法:count 和 checksum 聚合 要对比这三有没有不同,最简单就是计算三总数。...虽然,count 一样,两包含数据,就绝对一样了吗,答案是否定。假设,user_id, app_user_id 各包含 400万数据。...于是,我又想到了一种方案,那就是求 CRC 总和。CRC 方法,简单来说,就是求每个 user id 哈希,然后求和。若和一致,则说明两包含了相同。...而求两,最快方法,由上可知,便是Left Join 求 Null, 并且只要有一条数据存在,就足以说明集合包含关系.

    2.6K10

    Pandas 查找,丢弃唯一

    前言 数据清洗很重要,本文演示如何使用 Python Pandas 来查找和丢弃 DataFrame 中唯一,简言之,就是某数值除空外,全都是一样,比如:全0,全1,或者全部都是一样字符串如...:已支付,已支付,已支付… 这些大多形同虚设,所以当数据集很多而导致人眼难以查找时,这个方法尤为好用。...上代码前先上个坑吧,数据 NaN 也会被 Pandas 认为是一种 “ ”,如下图: 所以只要把缺失先丢弃,再统计该唯一个数即可。...代码实现 数据读入 检测唯一所有并丢弃 最后总结一下,Pandas 在数据清洗方面有非常多实用操作,很多时候我们想不到只是因为没有接触过类似的案例或者不知道怎么转换语言描述,比如 “...唯一 ” --> “ 除了空以外唯一个数等于1 ” ,许多坑笔者都已经踩过了,欢迎查看我其余文章,提建议,共同进步。

    5.7K21

    【Python】基于某些删除数据框中重复

    subset:用来指定特定,根据指定对数据框去重。默认为None,即DataFrame中一行元素全部相同时才去除。...导入数据处理库 os.chdir('F:/微信公众号/Python/26.基于组合删除数据框中重复') #把路径改为数据存放路径 name = pd.read_csv('name.csv...从结果知,参数为默认时,是在原数据copy上删除数据,保留重复数据第一条并返回新数据框。 感兴趣可以打印name数据框,删重操作不影响name。...结果和按照某一去重(参数为默认)是一样。 如果想保留原始数据框直接用默认即可,如果想直接在原始数据框删重可设置参数inplace=True。...但是对于两中元素顺序相反数据框去重,drop_duplicates函数无能为力。 如需处理这种类型数据去重问题,参见本公众号中文章【Python】基于组合删除数据框中重复。 -end-

    18.9K31

    删除 NULL

    今天接到一个群友需求,有一张表数据如图 1,他希望能通过 SQL 查询出图 2 结果。 ? 图 1 原始数据 ?...这个就类似于 Excel 里面的操作,把 NULL 所在单元格删了,下方单元格往上移,如果下方单元格仍是 NULL,则继续往下找,直到找到了非 NULL 来补全这个单元格内容。...那用 SQL 怎么表示呢? 有一个思路:把每一去掉 NULL 后单独拎出来作为一张独立表,这个表只有两个字段,一个是序号,另一个是去 NULL 后。...一个比较灵活做法是对原表数据做转行,最后再通过行转列实现图2 输出。具体实现看下面的 SQL(我偷懒了,直接把原数据通过 SELECT 子句生成了)。...,按在原表列出现顺序设置了序号,目的是维持同一相对顺序不变。

    9.8K30

    【Python】基于组合删除数据框中重复

    最近公司在做关联图谱项目,想挖掘团伙犯罪。在准备关系数据时需要根据两组合删除数据框中重复,两中元素顺序可能是相反。...二、基于删除数据框中重复 1 加载数据 # coding: utf-8 import os #导入设置路径库 import pandas as pd #导入数据处理库...import numpy as np #导入数据处理库 os.chdir('F:/微信公众号/Python/26.基于组合删除数据框中重复') #把路径改为数据存放路径 df =...由于原始数据是从hive sql中跑出来,表示商户号之间关系数据,merchant_r和merchant_l中存在组合重复现象。现希望根据这两组合消除重复项。...numpy as np #导入数据处理库 os.chdir('F:/微信公众号/Python/26.基于组合删除数据框中重复') #把路径改为数据存放路径 name = pd.read_csv

    14.6K30

    SQL 将多数据转到一

    假设我们要把 emp 表中 ename、job 和 sal 字段整合到一中,每个员工数据(按照 ename -> job -> sal 顺序展示)是紧挨在一块,员工之间使用空行隔开。...5000 (NULL) MILLER CLERK 1300 (NULL) 解决方案 将多数据整合到一展示可以使用 UNION...使用 case when 条件1成立 then ename when 条件2成立 then job when 条件3成立 then sal end 可以将多数据放到一中展示,一行数据过 case...when 转换后最多只会出来一个,要使得同一个员工数据能依次满足 case when 条件,就需要复制多份数据,有多个条件就要生成多少份数据。...完整SQL 如下: SELECT CASE rn WHEN 1 THEN ename WHEN 2 THEN job WHEN 3 THEN

    5.3K30

    OracleSQL多版本控制 - VERSION_COUNT

    在上一期“恩墨讲堂”微信课中,我提到了一个控制SQL多版本参数,有很多朋友讨论,这个参数是:_CURSOR_OBSOLETE_THRESHOLD 。 为什么会有这个参数呢?...请看下面这个示意图,这是一个真实生产环境,第一个SQL显示,其Version Count已经达到了26万个,这不仅仅占用了内存,而且会使得SQL解析延迟: ?...对于版本过多SQL,一次软解析甚至不如重新执行一次硬解析来高效,所以Oracle引入了一系列控制手段来处理这些特殊游标。...在11.2.0.3之后,这些解决方案最终形成了一个隐含参数,也就是 _CURSOR_OBSOLETE_THRESHOLD,其作用是当SQL版本超过这个参数设定后,直接舍弃这个游标,重新解析,重头开始。...Oracle很多细节控制都是体贴入微,且用且珍惜吧。 关于SQL多版本,MOS文章 296377.1 非常值得仔细看看。 点击原文链接报名,加入“恩墨讲堂”微信群。

    99360

    SQL删除多语句写法

    最近在写SQL过程中发现需要对一张表结构作调整(此处是SQL Server),其中需要删除多,由于之前都是一条SQL语句删除一,于是猜想是否可以一条语句同时删除多,如果可以,怎么写法?...第一次猜想如下(注意:此处是猜想,非正确写法): ALTER TABLE TableName DROP COLUMN column1,column2 但是执行后,发现语法错误, 于是改成如下方式:...ALTER TABLE TableName DROP COLUMN column1,COLUMN column2 执行正确,之后查看表结构,发现已删除,证明猜想正确。...以上所述是小编给大家介绍SQL删除多语句写法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家。在此也非常感谢大家对开源独尊支持!

    3.5K20

    如何让SQLCOUNT(*)飞起来

    COUNT(*)是每个初学者最爱,但凡漂亮按下回车时,看着转啊转进度条,总是有种莫名喜感。平时总被老板催着干这干那,现在我也能指挥下电脑帮我跑跑数据!...虽说平时面试官总爱问 COUNT(*) 有什么坏处啊,为什么要避免使用 COUNT(*) 这类怪问题。真要说起来,他们也是一脸懵圈,因为面试题都有可能是网上随便摘。...那么,COUNT(*)性能真那么差吗?怎么才能提高性能呢!今天就盘它 已知 SQL Server 中有这样张表 (其他数据库也适用): CREATE TABLE [dbo]....SQL Server: 我还可以更快 还有更快方法,列式索引。它优点除了节省空间外,还外加压缩,双重优化。...列式索引结构比较复杂,详细可见这篇(SQL Server Storage)。在这里提到列式索引,旨在分享,列式索引存储和压缩优势。 对数据库各项特性了解越多,对待同一问题可用方法也就越多。

    1.3K20

    关于mysql给加索引这个中有null情况

    由于联合索引是先以 前面的排序在根据后面的排序所以说将区分度高放在前面会减少扫描行数增加查询效率 但是最重要问题来了,我就要提交SQL时候 leader 问了一句我,你这边的话这个数据字段 默认为...我说是的默认为 null(按照规定这玩意是不能null 应该 not null,但是是历史数据 我这变也没改(其实这两个字段也是我之前实习时候加)),于是她说这样的话索引会失效, 于是我就在想为什么啊...B+树 不能存储为null字段吗。想想也是啊 为null 这个key 怎么建立啊,怎么进行区分呢?...于是带着疑问去查了查, 在innodb引擎是可以在为null里创建索引,并且在当条件为is null 时候也是会走索引。...所以说这个null一定是加到B+ 树里面了 但是这个就会哟疑问了 索引key为null在B+树是怎么存储着呢 ???

    4.2K20
    领券