- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我读过像 23423423423423423637 这样的 bigint 对于 primare 唯一键比像 961637593864109_412954765521130 这样的 varchar 要好但是 有多大 当我永远不会排序但只选择时有 100 万行时,差异有多大/更新一行。使用 varchar 对我来说会舒服得多,当性能差异低于 30% 或任何其他值时,我将继续使用它。我找不到任何基准。
最佳答案
这确实需要衡量,我们可以根据我们所知道的和我们假设的进行一些“猜测”,但这些只是猜测。
您没有提及此表是 InnoDB 还是具有动态行的 MyISAM 或具有固定长度行的 MyISAM。这会有所不同。
但对于像您发布的那样的值,'961637593864109_412954765521130'
(31 个字符),假设您使用的是单字节字符集(例如 latin1),或者将这些特定字符编码为的字符集单个字节(例如 utf8)...
对于 InnoDB 和 MyISAM 动态格式,该行有 31+1-8=24 个额外字节。 (BIGINT 适合 8 个字节,31 个字符的 VARCHAR(31) 值将使用 32 个字节。)
对于具有固定长度行的 MyISAM 表,这将是每行 23 个字节的差异。 (为所有31个字符预留空间,不必存储长度。)
该主键值也将在每个索引中重复,因此每个索引也会增加空间。
假设使用 BIGINT 的表行为 120 字节,使用 VARCHAR 的行为 144 字节,则增加了 20%。行越大,增加的百分比就越小,反之亦然。
对于 1,000,000 行(我很想说“one meelyun rows”,就像 Dr. Evil 将他的小指放在嘴角说“一百万美元”一样),每行额外的 24 个字节总计大约 24MB。
但这并不是那么容易。就 InnoDB 空间而言,这是行如何“适合” block 的问题。平均行大小越大, block 中的可用空间量就越大。
如果您除了将行存储在磁盘上之外不对这些行执行任何操作,那么它实际上只是增加了磁盘空间,以及用于备份的额外时间和空间。
如果“144 字节”行与“120 字节”行在一个 block 中的容量相同,那么您将看不到任何空间差异。但是,如果一个 block 中适合的行更少,那么 block 就会更多,InnoDB 缓冲池中的空间更多,输入/输出更多,等等。
对于单个行的查询,无论是通过主键值还是通过一些其他唯一索引查找,差异都可以忽略不计。
如果您正在处理更大的结果集,那么这就是用于准备结果集的额外内存,以及要传输到客户端的额外字节等。
如果 VARCHAR 键的设计方式是一起访问的“组”行具有键值的相同前导部分,那么对于 InnoDB,实际上可能会有一些性能改进。这是因为主键是簇键...满足查询所需的行更有可能位于同一个 block 中,而不是分布在一堆 block 中。
反之,如果执行了插入和删除操作,一些 block 中就会有更多的空闲空间。 (通过删除,已删除行的空间保留在 block 中;要重复使用,您需要插入一个具有相同键值的行(或者至少一个键值足够接近以使其位于同一 block 中.) 并且通过随机插入,我们将得到 block split 。
关于MySQL BIGINT(20) 与 Varchar(31) 性能对比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42566120/
我正在使用 gmp 执行复杂的操作。我想使用 Botan 来执行加密功能。问题是他们都有自己的 Bigint 函数。因此,在将 gmp 函数中使用的 bigint 值提供给 Botan 函数时会产生问
我正在尝试运行查询: let query = ` DELETE FROM ${table_name} WHERE
我有以下代码片段: use num_bigint::*; // 0.2.2 use num_traits::*; // 0.2.8 use std::ops::*; fn xgcd(b: &BigIn
我有一个 Postgres 8.2 表,其中列定义为 bigint 数据类型。 当我执行 sum(column) 时,返回类型是 numeric。我想强制将总和类型转换为 bigint,因为我确信结果
我有这样一个场景: CREATE TABLE `Users` ( `IdUser` bigint(20) NOT NULL PRIMARY KEY ) ENGINE=InnoDB DEFAULT
我想遍历一系列具有 BigUint 类型的值(来自 num crate )。 我该怎么做? 我试过了 for i in 0..a {...} 其中 a 是(借用的)BigUint 类型。我收到有关不匹
环境: Ubuntu 14.04 MySql 工作台 6.2.4 MariaDB 10 当我尝试将模型与数据库模式同步时,我已经在一个表中定义了 UNSIGNED BIGINT 类型(即 UNSIGN
我正在使用一个列来存储 UNIX 时间戳以秒为单位(除以 1000)。我发现 bigint 数据类型足以存储它。我使用 创建了它 ... createTimeStamp bigint, ...
我假设一种语言的实现允许您将指针视为整数,包括对它们进行标准算术。如果由于硬件限制这是不现实的,请告诉我。如果编程语言通常没有这么强大的指针运算,但是在实践中是可行的,那么我仍然想知道这种实现BigI
我正在尝试使用 Spark 将数据从 greenplum 移动到 HDFS。我可以从源表中成功读取数据,数据框(greenplum 表)的 spark 推断模式是: 数据框架构: je_header
我有一个表名称file_upload它的 upload_id 列为 BIGINT(11) AI PK NOT NULL当我将表列大小更改为 BIGINT(20) 时,AI 标志被删除,每次更改列中的任
我必须将一些加密代码从我不太熟悉的 java (visual c++) 移植到 visual c++。我在 http://sourceforge.net/projects/cpp-bigint/ 找到
我正在尝试对任意大整数实现 Solovoy-Strassen 素性检验。我还将编写一个 bignum(不能使用第 3 方实现,因为这是一个学术项目)。我已经决定了 bignum 的以下结构: stru
我有两个模型(商店和产品),两者的主键都是 BigInt,但产品(store_id)中的关系列仍然是整数。我不想使用原始 SQL,如何使用 Django 解决此问题? 例子: class Produc
有没有办法得到 BigInt 的对数?在 JavaScript 中? 对于普通数字,您将使用以下代码: const largeNumber = 1000; const result = Math.lo
在我的嵌入式项目中,我有一个处理任意长度整数的 biginteger 类。我希望能够生成一个介于 0 和任意数字之间的随机 bigint。假设我有一个高质量的随机字节源。 我见过的所有实现基本上都做同
我有一个 pandas pyspark 中的数据框.我想将此数据框创建/加载到 hive table 。 pd_df = pandas data frame id
有没有办法获得可以存储在 bigint 中的最大值,而无需对其进行硬编码? 是否有返回/包含此值的函数或常量? 最佳答案 请参阅 this similar question 中提供的答案.据我所知,没
我正在使用 Chapel,我正在尝试对 bigint 执行计算多语言环境设置中的数组。读取每行包含一个整数的文件。每行转换为 bigint记录然后插入到单个数组中。我有 4 个语言环境,因此我要求每个
我有一个存储过程,它必须返回一个 bigint 作为输出。下面如果定义。 在正文中,我在表中插入一行并在 @LogID 输出变量中使用 @@Identity 返回标识。 除返回部分外,一切正常。我试过
我是一名优秀的程序员,十分优秀!