首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >表的性能增强

表的性能增强
EN

Stack Overflow用户
提问于 2009-10-07 06:58:47
回答 3查看 122关注 0票数 2

对于MySQL,我经常忽略一些选项,比如‘签名/未签名’、‘允许为空’,但我想知道这些细节是否会减缓web应用程序的速度。

在这些情况下有什么显著的性能差异吗?

使用低/高范围的整数主键的

    • 5000行,ids为1到5000
    • 5000行,ids为20001至

  1. 整数PK一致递增与非一致增量.
    • 5000行,ids从1到5000
    • 5000行,ids分散在1到

    之间

将整数PK设置为无符号与签名的needed

  • 示例:其中未签名范围的增益实际上不是

为字段(任何类型)设置默认值的

  • 与不设置默认的
  • 示例:更新一行,所有字段数据都被赋予

  1. 允许Null与拒绝Null
    • 示例:更新一行,并且所有字段数据都给出了

我使用的是MySQL,但这更像是一个普遍的问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-07 09:48:54

使用低/高范围的整数主键* 5000行,ids从1到5000 * 5000行,ids从20001到25000

不会有任何区别。

整数PK一致递增与非一致增量.*5,000行ids从1到5,000*5,000行ids分散在1至30000

如果分布是均匀的,这就没有区别。

统一分布可能有助于建立更有效的随机抽样查询,正如本文在我的博客中描述的那样:

重要的是分布,没有界限:1, 11, 21, 31是好的,1, 2, 3, 31不是。

将Integer设置为无符号与签名*示例:实际上不需要在未签名范围内获得增益

如果您将PRIMARY KEY声明为UNSIGNED,则MySQL可以优化出像id >= -1这样的谓词。

设置字段(任何类型)的默认值与不设置默认值*示例:更新一行,并给出所有字段数据

没什么区别。

允许Null与拒绝Null *示例:更新一行并给出所有字段数据

可空列大一个字节:INT NOT NULL的索引键是5字节,INT NULL的索引键是4字节。

票数 0
EN

Stack Overflow用户

发布于 2009-10-07 07:20:15

根据我对B树的理解(这是关系数据库通常是如何实现的,对吗?),这些事情不应该有任何区别。您所需要的只是键上的快速比较函数,通常情况下,您使用的整数范围并不重要(除非您从机器字大小中取出来)。

当然,对于键,统一的默认值或允许null没有多大意义。在所有非键字段中,允许null或提供默认值不应产生任何重大影响.

票数 1
EN

Stack Overflow用户

发布于 2009-10-07 07:21:30

对于数据库来说,5000行几乎不算什么。他们通常使用大型B树作为索引,所以他们不太关心主键的分布。

通常,是否使用其他选项应根据您需要从数据库应用程序。他们不会对表演产生重大影响。因此,当您想要默认值时使用默认值,在不希望列为NOT NULL时使用NULL禁忌。

如果您有数据库性能问题,您应该寻找更重要的问题,比如缺少索引、可以高效重写的缓慢查询,确保数据库拥有有关数据的准确统计信息,以便能够正确地使用索引(尽管这是一项管理任务)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1529964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档