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

《Oracle性能优化求生指南》-第四章:数据库逻辑设计和物理设计-学习小结-1

位图索引和(部分列为NULL的)多列组合索引就能存储NULL值。 采用NULL可以降低行的平均长度,从而一定程度上提高全表扫描的性能。...如果该列的数值大部分是NULL,并且查询仅需检索非NULL的值,则该列上的索引会比较紧凑并很高效。 因此,决定一列是否可以为NULL的时候,要考虑在该列上是否有使用B*树索引查询NULL的需求。...如果有,则不能指定该列为NULL,取而代之的是定义该列为NOT NULL(非空),并指定一个默认值。 如果要查询那些未知的值,则不能定义列为空,相反,要定义列为非空并指定一个默认值。...那些值为NULL的字段通常需要一个字节的存储空间,但如果该行中随后的列的数值都为NULL,则Oracle不需要为这些NULL分配任何空间。...如果将那些大部分为NULL的列存储在表的末尾,则行的实际长度会变小,这样有助于提高表扫描的性能。

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

    MySQL的count(*)、count(1)和count(列名)区别

    假如有如下数据: 所有记录 统计行的总数 计算 Zara 的记录数 count(1)、count() 都是检索表中所有记录行的数目,不论其是否包含null值。...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()最优。

    3.5K20

    MySQL的count()函数及其优化

    (*) 作用 都是检索表中所有记录行的数目,不论其是否包含null值 区别 count(1)比count(*)效率高 二 . count(字段)与count(1)和count(*)的区别 count(字段...)的作用是检索表中的这个字段的非空行数,不统计这个字段值为null的记录 任何情况下SELECT COUNT(1) FROM tablename是最优选择 尽量减少SELECT COUNT(*)...用1代表代码行,在统计结果的时候,不会忽略列值为NULL count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL...执行效率上: 列名为主键,count(列名)会比count(1)快 列名不为主键,count(1)会比count(列名)快 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count...() 如果有主键,则 select count(主键)的执行效率是最优的 如果表只有一个字段,则 select count()最优。

    1.1K10

    mysql explain ref const_MySQL EXPLAIN 详解「建议收藏」

    4.4 type=ref 非唯一性索引访问 这是一种索引访问(有时也叫做索引查找),它返回所有匹配某个单个值的行,然而,它可能会找到多个符合条件的行。...如果表是第一个没标记const的表,这通常不好,并且通常在它情况下很差。通常可以增加更多的索引而不要使用ALL,使得行能基于前面的表中的常数值或列值被检索出。...七. key : 该key 列指出mysql优化器决定选择使用哪个索引来优化对该表的访问。一般来说SQL查询中的每个表都只会使用一个索引。...也即说明key_len通过查找表的定义而被计算出,而不是表中的数据。 在不损失精确性的情况下,长度越短越好. 九. ref : ref 列显示使用哪个列或常数与key一起从表中选择数据行。...指出对 key 列所选择的索引的查找方式,常见的值有 const, func, NULL, 具体字段名。当 key 列为 NULL ,即不使用索引时 。

    1K40

    【MySQL】详解表的约束

    一、空属性 空属性有两个值:null(默认的)和not null(不为空)。数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。...-+---------+-------+ 二、默认值和列描述 默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。...key; 在创建表的时候,在所有字段之后,使用primary key( 主键字段列表)来创建主键,如果有多个字段作为主键, 可以使用复合主键 。...假如指定表中两列为复合主键,只要两列中有一列的数据不同于其他列数据就可以正常插入。...六、外键 外键用于定义主表和从表之间的关系: 外键约束主要定义在从表上,主表则必须是有主键约束或unique约束。当定义外键后,要求外键列数据必须在主表的主键列存在或为null 。

    9510

    跟大模型学习SQL-count

    COUNT(column):只计算指定列中非 NULL 值的数量,如果该列上有索引,可能利用索引来提高性能。 在实际应用中,如果你需要计算表中所有行的数量,使用 COUNT(*) 是合适的选择。...我得先回忆一下这两者的基本用法,然后比较它们的不同之处。首先,COUNT(*)会统计表中所有行的数量,不管列是否有NULL值。而COUNT(column)则只统计指定列不为NULL的行数。...COUNT(1)和COUNT()在功能上是一样的,因为1也是一个非NULL的值,所以COUNT(1)会和COUNT()一样统计所有行。...还有一个点是,当表很大时,COUNT()可能会导致全表扫描,而如果有索引的话,可能会更快。比如,如果要统计符合某些条件的行数,使用COUNT()可能更合适,因为它不需要关心具体的列是否为NULL。...COUNT(column) 作用: 统计指定列中非NULL值的数量。 说明: COUNT(column) 只统计指定列中不为NULL的行数。 如果列中存在NULL值,这些NULL值会被忽略。

    5810

    MySQL 不同存储引擎下 count(星) count(1) count(field) 结果集和性能上的差异,不要再听网上乱说了

    ,存在二级索引的情况下,使用二级索引进行计数;若存在多个二级索引选择二级索引中的最小索引。...命中下文特殊优化规则除外:即对应的列不为 NULL 则直接查询表的统计信息获取。....大致的意思是说,对于使用 MyISAM 存储引擎的表,如果一个COUNT(*) COUNT(n) 没有其它查询条件,或COUNT(field) 对应的列不为 NULL,则会很快返回计数结果。...count(field) 查询的是 field 列不为 NULL 的数据。...,使用索引大小更小的索引如果使用 SELECT COUNT(field) FROM student因为需要查询出字段每一行是否为 NULL,所有只能使用该列的索引,若无索引,则进行全表扫描。

    31720

    你还在认为 count(1) 比 count(*) 效率高?

    但是差的很小的。 因为count(),自动会优化指定到那一个字段。所以没必要去count(1),用count(),sql会帮你完成优化的 因此:count(1)和count(*)基本没有差别!...03 count(*) 和 count(1)和count(列名)区别 01 执行效果上 count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL count(1)包括了忽略所有列...,用1代表代码行,在统计结果的时候,不会忽略列值为NULL count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL...、 02 执行效率上 列名为主键,count(列名)会比count(1)快 列名不为主键,count(1)会比count(列名)快 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count...(*) 如果有主键,则 select count(主键)的执行效率是最优的 如果表只有一个字段,则 select count(*)最优。

    36410

    学习SQLite之路(二)

    (2)设置输出列的宽度: sqlite>.width 10, 20, 10, 0 第一列宽度为10,第二列为20,第三列为10,第四列为默认(0表示默认) (3)Schema信息:  系统里面有个表叫...(a == b) 不为真。 = 检查两个操作数的值是否相等,如果相等则条件为真。 (a = b) 不为真。 != 检查两个操作数的值是否相等,如果不相等则条件为真。 (a != b) 为真。...的值是否小于右操作数的值,如果是则条件为真。 (a < b) 为真。 >= 检查左操作数的值是否大于等于右操作数的值,如果是则条件为真。 (a >= b) 不为真。...OR OR 运算符用于结合一个 SQL 语句的 WHERE 子句中的多个条件。 IS NULL NULL 运算符用于把某个值与 NULL 值进行比较。 IS IS 运算符与 = 相似。...SQLite order by子句:用来基于一个或多个列按升序或降序顺序排列数据。

    2K70

    案例解析:count(1)、count(*) 与 count(列名) 的执行区别

    而count(字段)则与前两者不同,它会统计该字段不为null的记录条数。 话不多说了,来一起看看详细的介绍吧。...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(*)最优 mysql> create table counttest(name char

    1.5K11

    执行COUNT(1)、COUNT(*) 与 COUNT(列名) 到底有什么区别?

    3. 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(*)最优。

    73830

    扒一扒InnoDB数据在硬盘上是如何存放的

    首先判断表中是否有非空的索引,如果有则第一个定义的非空索引作为主键 如果不符合上述条件,InnoDB存储引擎自动创建一个6个字节大小的指针 这样的描述太干瘪啦,我们来动手操作下。...NULL值列表 我们知道表中的某些列可能存储NULL值,如果这些NULL值放在记录的真实数据中存储会占用空间,所以Compact将这些值为NULL的列统一管理起来,存储在NULL表中。...注意:跟变长字段一样,如果表中没有NULL值的列,则该字段不存在。 注意:MySQL规定NULL值列表必须是整数个字节的位表示,如果使用的二进制位歌手不是整数个字节,则在字节的高位补0....第一行数据虽然没有NULL值,但是a,c是可能存储NULL值的列,所以NULL值列表如下,0表示列所对应的值不为NULL,1表示列所对应的值为NULL。 ?...即采用目录的形式,将所有的记录划分为多个记录块,然后取每个记录块的最大的值,将其组成一个目录,在查找的时候,先查目录,能判断在哪个区间内。这个过程就类似于在书中找到某一个概念,要从目录先找一样。

    74220

    SQL 基础-->SELECT 查询

    SQL 语句不区分大小写 SQL 语句能输入一行或多行 关键字不能整行缩写或分离 子句通常被放置在分开的行上 缩进可提高可读性 在SQL 开发工具,SQL 语句能选择分号结束(;) .当你运行多个...,也不是空格 一般运算符与其进行运算时,都会为空 空不与任何值相等 表示某个列为空用:IS NULL 不能使用COMM=NULL这种形式 某个列不为空:IS NOT NULL 不能使用COMM...(表达式1,表达式2) 作用:测试表达式的值,如果表达式1为空,则返回表达式2的值;不为空,返回表达式1的值。...NVL2 函数 格式:NVL2(表达式1,表达式2,表达式3) 作用:测试表达式的值,表达式1不为空,返回表达式2的值,如果为空,则返回表达式3的值。...,表达式n) 作用:返回第一个不为空的值,如果所有的都为空,则返回NULL。

    97820

    hhdb数据库介绍(10-40)

    其中逻辑库、表信息、列名匹配规则、应用于SQL查询结果、应用于日志输出内容列可排序。 添加脱敏规则 一个脱敏规则中可以同时对多个逻辑库的多张表的多个列的值进行全部脱敏或部分脱敏。...此时“例外库对象”为当前管理平台上所有的逻辑库(包括已创建但未加载过的逻辑库),可选择一个或多个或全部选择。“例外表对象”为勾选的逻辑库之外的逻辑库下所有的表,可选择一个或多个或全部选择。...脱敏列的值为NULL时,脱敏后仍然为NULL;脱敏列的值为字符串空,将正常脱敏。...无法正常解析语句(如语法错误的语句),表解析不出来会无法匹配规则 也即不会脱敏。 空字符串根据实际字符串长度脱敏,字符串长度不为0均脱敏。 NULL值不脱敏。...空字符串根据实际字符串长度脱敏,字符串长度不为0均脱敏。 NULL值不脱敏。 选择“按位数替换”时,当数据位数不足脱敏位数时,会自动反向查找补位脱敏。

    6510

    性能大PK count(*)、count(1)和count(列)

    count(1) 会统计表中的所有的记录数,包含字段为 null 的记录。 同样遍历整张表,但不取值,server 层对返回的每一行,放一个数字1进去,判断是不可能为空的,按行累加。...执行效果上: count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为null count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为null count...(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null 的计数,即某个字段值为null 时,不统计。...执行效率上: 列名为主键, count(列名) 会比 count(1)快 列名不为主键, count(1) 会比 count(列名)快 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count...(*) 如果有主键,则 select count(主键) 的执行效率是最优的 如果表只有一个字段,则 select count(*)最优。

    1.6K10

    你还在认为 count(1) 比 count(*) 效率高?

    但是差的很小的。 因为count(),自动会优化指定到那一个字段。所以没必要去count(1),用count(),sql会帮你完成优化的 因此:count(1)和count(*)基本没有差别!...3. 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(*)最优。

    65420

    你还在认为 count(1) 比 count(*) 效率高?

    但是差的很小的。 因为count(),自动会优化指定到那一个字段。所以没必要去count(1),用count(),sql会帮你完成优化的 因此:count(1)和count(*)基本没有差别!...3. 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(*)最优。

    35720

    你还在认为 count(1) 比 count(*) 效率高?

    3. count(*) 和 count(1)和count(列名)区别 执行效果上: count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL。...count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL。...count(列名)只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是只空字符串或者0,而是表示null)的计数,即某个字段值为NULL时,不统计。...列名不为主键,count(1)会比count(列名)快。 如果表多个列并且没有主键,则 count(1) 的执行效率优于 count(*)。...如果有主键,则 select count(主键)的执行效率是最优的。 如果表只有一个字段,则 select count(*)最优。 4.

    36120
    领券