Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 表的性能增强_Mysql_Performance_Database Design_Primary Key - Fatal编程技术网

Mysql 表的性能增强

Mysql 表的性能增强,mysql,performance,database-design,primary-key,Mysql,Performance,Database Design,Primary Key,对于MySQL,我经常忽略一些选项,如“signed/unsigned”int和“allow null”,但我想知道这些细节是否会降低web应用程序的速度 在这些情况下是否存在显著的性能差异 使用整数主键的低/高范围 5000行,ID从1到5000 5000行,ID从20001到25000 整数PK一致递增与非一致递增。 5000行,ID从1到5000 5000行,ID分布在1到30000之间 将整数PK设置为无符号与有符号 示例:实际不需要unsigned的增益范围 为字段(任何类

对于MySQL,我经常忽略一些选项,如“signed/unsigned”int和“allow null”,但我想知道这些细节是否会降低web应用程序的速度

在这些情况下是否存在显著的性能差异

  • 使用整数主键的低/高范围
    • 5000行,ID从1到5000
    • 5000行,ID从20001到25000
  • 整数PK一致递增与非一致递增。
    • 5000行,ID从1到5000
    • 5000行,ID分布在1到30000之间
  • 将整数PK设置为无符号与有符号
    • 示例:实际不需要unsigned的增益范围
  • 为字段(任何类型)设置默认值与无默认值
    • 示例:更新一行并给出所有字段数据
  • 允许空与拒绝空
    • 示例:更新一行和所有字段数据

  • 我使用的是MySQL,但这更像是一个一般性问题。

    根据我对B树的理解(关系数据库通常就是这样实现的,对吧?),这些东西应该不会有任何区别。你所需要的只是在你的键上有一个快速的比较函数,而且你使用的整数范围通常并不重要(除非你超出了机器字的大小)


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

    5000行对于数据库来说几乎没有任何意义。它们通常使用大型B树作为索引,因此它们不太关心主键的分布

    通常,是否使用其他选项应根据您对数据库应用程序的需求而定。它们不会显著影响性能。因此,当需要默认值时使用默认值,当不希望列为
    NULL
    时使用
    notnull
    约束

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

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

    没有任何区别

    整数PK一致递增与非一致递增。 *5000行,ID从1到5000 *5000行,ID分布在1到30000之间

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

    均匀分布可能有助于构建更高效的随机抽样查询,如我博客中的这篇文章所述:

    重要的是分布,而不是边界:
    1,11,21,31
    是可以的,
    1,2,3,31
    不是

    将整数PK设置为无符号与有符号 *示例:实际不需要unsigned的增益范围

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

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

    没有区别

    允许空与拒绝空 *示例:更新一行和所有字段数据

    可为空的列大一个字节:
    INT NOT NULL
    的索引键长度5字节,而
    INT NULL
    的索引键长度4字节