gpt4 book ai didi

mysql - 可空列何时会严重影响性能?

转载 作者:太空宇宙 更新时间:2023-11-03 12:25:13 26 4
gpt4 key购买 nike

据我所知,应该尽可能避免在数据库中使用可为空的列。

但是,在哪些特定情况下可为空的列实际上会导致性能显着下降?

换句话说,什么时候 null 真的会影响性能? (与可忽略不计且根本无关紧要的情况相反)。

我问是为了知道它何时以及如何真正产生影响。

最佳答案

不知道你从哪里听说的,但这不是真的。

可空列用于准确表示数据:如果值未知或尚未输入,则 NULL 是要存储的自然值。 Null 值的存储或检索并不比任何其他类型的值更繁琐:大多数数据库服务器将它们存储在一个位中,这意味着检索 NULL 值比组装 varchar 需要更少的 I/O 和处理器工作量, BLOB,或来自一堆片段的文本字段,可能需要遍历链表,或从硬盘驱动器读取更多磁盘 block 。

有几个与可空列略微相关的实例可能会影响性能:

  1. 如果您在可为 null 的列上创建索引,并且该列中的实际值是稀疏的(即许多行具有 NULL 值,或者只有极少数值存在(例如,使用受控词汇值),用于为列编制索引的 b 树数据结构变得效率低得多。当索引中的一半值相同时,索引遍历操作变得更加昂贵:你最终会得到一棵不平衡的树。

    <
  2. NULL 值的不当使用,或未按设计使用 NULL 值的不当查询技术通常会导致性能不佳,因为程序员通常会养成搜索或连接计算列值的坏习惯,它忽略了现代数据库服务器出色的集处理能力。我咨询过许多开发人员习惯于编写如下子句的地方:

    WHERE ISNULL(myColumn, '') = ''

这意味着数据库服务器不能直接使用索引,并且必须对执行树的该部分的每一行执行计算以评估查询。这并不是因为在存储、比较或评估 NULL 值时存在任何内在的低效率,而是因为查询阻碍了数据库引擎实现特定结果的能力。

关于mysql - 可空列何时会严重影响性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18005269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com