当前位置: 首页 > 面试题库 >

MySQL中的NULL(性能和存储)

季凡
2023-03-14
问题内容

在MySQL中,性能和存储(空间)明智地归零是什么?

例如:

TINYINT:1字节TINYINT w / NULL 1字节+以某种方式存储NULL?


问题答案:

这取决于您使用的存储引擎。

在MyISAM格式中,每个行标题都包含一个位域,每个列的每个位都具有一位以对NULL状态进行编码。NULL列仍会占用空间,因此NULL不会减少存储量。参见https://dev.mysql.com/doc/internals/en/myisam-
introduction.html

在InnoDB中,每一列在行标题中都有一个“字段开始偏移量”,每列一个或两个字节。如果该列为NULL,则该字段起始偏移量的高位为开。在那种情况下,该列根本不需要存储。因此,如果您有很多NULL,则应该大大减少存储空间。参见https://dev.mysql.com/doc/internals/en/innodb-
field-contents.html

编辑:

NULL位是行标题的一部分,您不选择添加它们。

我可以想象NULL提高性能的唯一方法是,在InnoDB中,如果行中包含NULL,则数据页可以容纳更多行。因此,您的InnoDB缓冲区可能更有效。

但是,如果这在实践中提供了显着的性能优势,我将感到非常惊讶。担心NULL对性能的影响在于微优化领域。您应该将注意力集中在其他方面,这些领域可以带来更大的收益。例如,添加精心选择的索引或增加数据库缓存分配。



 类似资料:
  • 问题内容: 我们正在考虑将UUID值用作MySQL数据库的主键。所插入的数据是从数十台,数百台甚至数千台远程计算机生成的,并且以每秒100-40,000次插入的速度插入,我们将永远不会进行任何更新。 在我们开始选择数据之前,数据库本身通常会获得大约5000万条记录,因此不是庞大的数据库,但也不小。我们也计划在InnoDB上运行,但是如果我们有更好的引擎来进行我们的工作,我们愿意改变它。 我们已经准

  • 问题内容: 我想知道是否在MySQL查询中使用CASE … WHEN … THEN表达式 对性能有负面影响? 而不是使用CASE表达式(例如,在UPDATE查询中), 您始终可以在程序中用 php,python,perl,java等编写if语句来选择要发送的查询(例如,以伪代码) ): 或侵入: (这里的c1只需要表明在两种情况下都发生了某些事情) 哪种方法具有更好的性能? 性能损失是多少? 问题

  • 问题内容: 我写了两种方法检查那里的表现 并在编译后检查它的字节码 在这里,两个操作码用于实现if条件:在第一种情况下,它使用ifnull-检查栈顶值是否为null-;在第二种情况下,它使用if_acmpeq- 检查栈顶值是否相等- 那么,这会对性能产生影响吗?(这将帮助我证明null的第一个实现在性能方面以及可读性方面都不错:)) 问题答案: 比较生成的字节码几乎没有意义,因为大多数优化是在运行

  • 问题内容: 我说的对吗? 将只计算非null吗? 将始终计算所有行吗?而且如果所有列都为空怎么办? 问题答案: 正确。COUNT(*)是表中的所有行,COUNT(Expression)是表达式仅非空的地方。 如果所有列均为NULL(表示您没有主键,那么这在规范化数据库中就不会发生)COUNT(*) 仍 返回所有插入的行。只是不要那样做。 您可以将*符号认为是“在表格中”而不是“在任何列中”。 这在

  • 由于事件处理程序可以为现代Web 应用程序提供交互能力,因此许多开发人员会不分青红皂白地向页面中添加大量的处理程序。在创建GUI 的语言(如C#)中,为GUI 中的每个按钮添加一个onclick事件处理程序是司空见惯的事,而且这样做也不会导致什么问题。可是在JavaScript 中,添加到页面上的事件处理程序数量将直接关系到页面的整体运行性能。导致这一问题的原因是多方面的。首先,每个函数都是对象,

  • 好了,前面的章节解释了使用Kotlin代码完美地工作。但是与普通的Java库和Android SDK会发生什么呢?在Java中,所有对象可以被定义为null。所以我们不得不处理大量潜在的在现实中不可能是null的null变量。这意味着我们的代码最后可能会有几百个!!操作符,这绝对不是一个好的主意。 当我们去处理Android SDK时,你可能看见所有Java方法的参数被标记为单个的!。比如,Jav