我有一个存储 MD5 哈希的索引列。因此,该列将始终存储 32 个字符的值。无论出于何种原因,它都是作为 varchar 而不是 char 创建的。迁移数据库以将其转换为字符是否值得?这是在带有 InnoDB 的 MySQL 5.0 中。
我已经阅读了许多关于取决于存储引擎的主键效率的文章,但我很困惑。
给定一个简单的多对多表,其中包含两个字段storeId
和zoneId
,以下哪种设计对 InnoDB 最有效,为什么?
CREATE TABLE store_zone(
storeId INT(10) UNSIGNED NOT NULL,
zoneId INT(10) UNSIGNED NOT NULL,
PRIMARY KEY(storeId, zoneId)
);
Run Code Online (Sandbox Code Playgroud)
CREATE TABLE store_zone(
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
storeId INT(10) UNSIGNED NOT NULL,
zoneId INT(10) UNSIGNED NOT NULL,
PRIMARY KEY(id),
UNIQUE KEY(storeId, zoneId)
);
Run Code Online (Sandbox Code Playgroud)
笔记:
storeId
,我需要 ( , zoneId
) 对上的唯一键store
和zone
桌子,在这里没有显示可读性,所以在这两种情况下有上一个额外的要求指标zoneId
,以及为什么 MySQL 将 blob 存储在直接表中而不是放在一边,以便如果它需要读取相应的内容,它将读取到一边的内容?本质上,它会创建自己的文件,该文件在文件文件夹类型的体系结构中不受除自身之外的所有内容的影响,以便更容易/更快地写出 blob 链接。