8.4.2.2 优化字符和字符串类型

对于字符和字符串列,请遵循以下准则:

  • 当您不需要特定于语言的排序规则功能时,请使用二进制排序规则 Sequences 进行快速比较和排序操作。您可以使用BINARY运算符在特定查询中使用二进制排序规则。

  • 比较来自不同列的值时,请尽可能声明具有相同字符集和排序规则的那些列,以避免在运行查询时进行字符串转换。

  • 对于小于 8KB 的列值,请使用二进制VARCHAR而不是BLOBGROUP BYORDER BY子句可以生成临时 table,并且如果原始 table 不包含任何BLOB列,则这些临时 table 可以使用MEMORY存储引擎。

  • 如果 table 包含名称和地址之类的字符串列,但是许多查询未检索到这些列,请考虑将字符串列拆分为单独的 table,并在必要时使用带有外键的联接查询。当 MySQL 从一行中检索任何值时,它将读取一个包含该行所有列(可能还有其他相邻行)的数据块。保持每行较小,仅使用最常使用的列,可使更多行适合每个数据块。这样的紧凑 table 减少了常见查询的磁盘 I/O 和内存使用量。

  • 当您将随机生成的值用作InnoDBtable 中的主键时,请尽可能在其前面加上一个升值,例如当前日期和时间。当连续的主值在物理上彼此靠近存储时,InnoDB可以更快地插入和检索它们。

  • 有关为什么数字列通常比等效字符串列更可取的原因,请参见第 8.4.2.1 节“优化数值数据”