0

我有一个需要大规模快速运行的 MySQL 数据库。

选项 1 表可以将语言 ISO 639-3 代码存储为列:varchar(3) 语言

选项 2 表可以将语言的 ID 存储为列:int(2?) language_id,并且可以有一个具有 ISO 639-3 代码的语言表。

问题 什么对大规模速度有意义?选项 1 在数据库中更易于阅读。如果速度相同或即使在规模上完全可以忽略不计,我更喜欢它。

谢谢!

4

1 回答 1

0

我建议:

CREATE TABLE ...
    ISO_630_3 CHAR(3) CHARACTER SET ascii

那将是 3 个字节,小于INT(4 个字节)and not much bigger thanSMALLINT UNSIGNED`(2 个字节)。

(我是否正确地说代码始终是 3 个 ascii 字母?因此不需要VAR,它需要额外的一两个字节。)

CHAR(3)很容易被索引。即使对 smallint,“规范化”也没有显着优势。即使在十亿行的规模上,这仍然适用。

而且,正如您所指出的,“更易于阅读”是值得的。

如果您还存储文本,我假设所有这些文本都可以映射到 UTF-8?如果是这样,请使用

     my_text TEXT CHARACTER SET utf8mb4

在 MySQL 中,使用不同字符集(或排序规则)的单个表中的不同列没有问题。

或许值得注意...许多语言可以从 hex utf-8 编码中发现:

⚈  Cxyy -- More Western Europe: Latin (C3-CA), Combining Diacritical Marks (CC-CD), Greek (CE-CF)
⚈  Dxyy -- Cyrillic (D0-D4), Hebrew (D6-D7), Arabic/Persian/Farsi (D8-DB), etc
⚈  E0yyyy -- various Indian character sets, southern Asia, etc.
⚈  E1yyyy -- Cherokee, Balinese, Khmer, Mongolian, Vietnamese, etc.
(etc)

-- http://mysql.rjweb.org/doc.php/charcoll#diagnosing_charset_issues

于 2020-12-31T20:12:07.067 回答